扩展名未通过路由处理的网址

时间:2012-12-29 17:12:56

标签: asp.net-mvc-4 asp.net-mvc-routing

我一直在建议from this article在asp.net mvc3中设置robots.txt文件以使用控制器来处理服务器响应,而IIS 8.0 express正在返回找不到文件的错误,而不是asp.net错误。

在这些情况下,如何让IIS不查找文件?我在web.config中有什么需要吗?

2 个答案:

答案 0 :(得分:36)

IIS试图在这里变得聪明。他拦截了网址中的点,并认为这是一个静态文件,并尝试使用默认的StaticFile处理程序。它没有事件进入托管的ASP.NET应用程序。

第一种可能性是在web.config中添加以下内容

<system.webserver>
    <modules runAllManagedModulesForAllRequests="true" />

但实际上这不是我建议你做的事情,因为这可能会对你的应用程序的性能产生负面影响,因为现在所有对静态文件的请求(例如.js,.css,images,...)都会出现通过管理的渠道。

建议的方法是将以下处理程序添加到web.config<handlers>的{​​{1}}标记中):

<system.webServer>

请注意我们如何指定此处理程序仅适用于特定的URL和HTTP谓词。

现在当你获得<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> 时,IIS将不再使用/robots.txt处理程序处理它,而是将其传递给托管管道ASP.NET。然后它将被路由引擎拦截并路由到相应的控制器操作。

答案 1 :(得分:1)

除非您需要动态生成的 robots.txt 文件,这是非常必要的,只需执行以下操作:

  • 忽略robots.txt的路线

    routes.IgnoreRoute( “robots.txt的”);

  • 将robots.txt文件添加到根目录