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

Chr*_*son 14 asp.net-mvc-routing asp.net-mvc-4

我一直在接受本文的建议,即在asp.net mvc3中设置robots.txt文件,以便使用控制器来处理服务器响应,而IIS 8.0 express则返回一个文件未找到错误,而不是asp.净误差.

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

Dar*_*rov 36

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

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

<system.webserver>
    <modules runAllManagedModulesForAllRequests="true" />
Run Code Online (Sandbox Code Playgroud)

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

建议的方法是将以下处理程序添加到您的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>
Run Code Online (Sandbox Code Playgroud)

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

现在,当您获取时/robots.txt,IIS将不再使用处理StaticFile程序处理它,而是将其传递给托管管道ASP.NET.然后它将被路由引擎拦截并路由到相应的控制器操作.

  • 有没有办法保持IIS处理静态文件的行为,但如果找不到该文件,而不是提供IIS 404页面,请将其传递到托管管道进行审核? (2认同)