我一直在遵循本文中的建议,在 asp.net mvc3 中设置 robots.txt 文件以使用控制器处理服务器响应,并且 IIS 8.0 express 返回文件未找到错误,而不是 asp。净误差。
在这些情况下,如何让 IIS 不查找文件?web.config 中有我需要的东西吗?
我一直在遵循本文中的建议,在 asp.net mvc3 中设置 robots.txt 文件以使用控制器处理服务器响应,并且 IIS 8.0 express 返回文件未找到错误,而不是 asp。净误差。
在这些情况下,如何让 IIS 不查找文件?web.config 中有我需要的东西吗?
IIS 试图在这里变得智能。他截取了 url 中的点并认为这是一个静态文件并尝试使用默认StaticFile
处理程序来提供它。它不会让事件到达托管的 ASP.NET 应用程序。
第一种可能性是在您的 web.config 中添加以下内容
<system.webserver>
<modules runAllManagedModulesForAllRequests="true" />
但实际上我不建议您这样做,因为这可能会对应用程序的性能产生负面影响,因为现在对静态文件(例如 .js、.css、图像...)的所有请求都将通过托管管道。
推荐的方法是将以下处理程序添加到您的web.config
(<handlers>
标记<system.webServer>
):
<system.webServer>
<handlers>
<add name="Robots-ISAPI-Integrated-4.0" path="/robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
...
</handlers>
</system.webServer>
请注意我们如何指定此处理程序仅适用于特定的 URL 和 HTTP 动词。
现在,当您 GET 时/robots.txt
,IIS 将不再使用处理程序处理它,StaticFile
而是将其传递给托管管道 ASP.NET。然后会被路由引擎拦截,路由到对应的控制器动作。
除非您需要动态生成的robots.txt文件(这很少需要),否则只需执行以下操作:
忽略到 robots.txt 的路由
routes.IgnoreRoute("robots.txt");
将 robots.txt 文件添加到您的根目录