Asp.net-Mvc-4
帶有副檔名的 url 沒有被路由處理
我一直在遵循本文的建議,在 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。然後會被路由引擎攔截,路由到對應的控制器動作。