Я думаю, что основное различие - то, что платформы следуют" , голливудский принцип ", т.е. "не звонят нам, мы позвоним Вам".
Согласно Martin Fowler :
А библиотека является по существу рядом функций, которые можно вызвать, в эти дни обычно организуемый в классы. Каждый вызов делает некоторую работу и возвращает управление клиенту.
А платформа воплощает некоторый абстрактный дизайн с большим встроенным поведением. Для использования его, необходимо вставить поведение в различные места в платформе или путем разделения на подклассы или путем включения собственных классов. Код платформы тогда называет Ваш код в этих точках.
Это можно легко сделать с помощью модуля URLRewrite в IIS7. Но я действительно не знаю, предотвратит ли это регистрацию этих запросов.
<rewrite>
<rules>
<rule name="Ban user-agent RogueBot" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_USER_AGENT}" pattern="RogueBotName" />
<add input="{MyPrivatePages:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="AbortRequest" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="MyPrivatePages">
<add key="/PrivatePage1.aspx" value="block" />
<add key="/PrivatePage2.aspx" value="block" />
<add key="/PrivatePage3.aspx" value="block" />
</rewriteMap>
</rewriteMaps>
</rewrite>
Не думайте, что это можно сделать из web.config (авторизация в web.config предназначена для пользователей, а не для ботов). Лучше всего будет какой-то настраиваемый фильтр ISAPI для самого IIS. Об этом есть блог . Удачи!
Вы можете написать собственный HttpModule ASP.Net, как я сделал для своего сайта, чтобы заблокировать некоторых ботов-мошенников . Вот код:
public class UserAgentBasedRedirecter : IHttpModule
{
private static readonly Regex _bannedUserAgentsRegex = null;
private static readonly string _bannedAgentsRedirectUrl = null;
static UserAgentBasedRedirecter()
{
_bannedAgentsRedirectUrl = ConfigurationManager.AppSettings["UserAgentBasedRedirecter.RedirectUrl"];
if (String.IsNullOrEmpty(_bannedAgentsRedirectUrl))
_bannedAgentsRedirectUrl = "~/Does/Not/Exist.html";
string regex = ConfigurationManager.AppSettings["UserAgentBasedRedirecter.UserAgentsRegex"];
if (!String.IsNullOrEmpty(regex))
_bannedUserAgentsRegex = new Regex(regex, RegexOptions.IgnoreCase | RegexOptions.Compiled);
}
#region Implementation of IHttpModule
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += RedirectMatchedUserAgents;
}
private static void RedirectMatchedUserAgents(object sender, System.EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (_bannedUserAgentsRegex != null &&
app != null && app.Request != null && !String.IsNullOrEmpty(app.Request.UserAgent))
{
if (_bannedUserAgentsRegex.Match(app.Request.UserAgent).Success)
{
app.Response.Redirect(_bannedAgentsRedirectUrl);
}
}
}
public void Dispose()
{ }
#endregion
}
Вам нужно будет зарегистрировать его в web.config и указать регулярное выражение, которое будет использоваться для сопоставления строк пользовательского агента. Вот один, который я использовал для блокировки трафика msnbot / 1.1:
<configuration>
<appSettings>
<add key="UserAgentBasedRedirecter.UserAgentsRegex" value="^msnbot/1.1" />
</appSettings>
...
<system.web>
<httpModules>
<add name="UserAgentBasedRedirecter" type="Andies.Web.Traffic.UserAgentBasedRedirecter, Andies.Web" />
</httpModules>
</system.web>
</configuration>