Asp.net-Mvc-4

帶有副檔名的 url 沒有被路由處理

  • April 4, 2016

我一直在遵循本文的建議,在 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。然後會被路由引擎攔截,路由到對應的控制器動作。

引用自:https://stackoverflow.com/questions/14084024