ASP.NET MVC Url中帶點號出現404錯誤的解決方案


由於項目需求,項目的路由設計如下

  config.Routes.MapHttpRoute(
                name: "Get/Put Sku",
                routeTemplate: "apiSets/{apiSetName}",
                defaults: new { controller = "Sku" },
                constraints: new { httpmethod = new HttpMethodConstraint(HttpMethod.Get, HttpMethod.Put) },
                handler: authHandler
            );
  config.Routes.MapHttpRoute(
                name: "Validate Sku",
                routeTemplate: "apiSets/{apiSetName}/validate",
                defaults: new { controller = "Sku" },
                constraints: new { httpmethod = new HttpMethodConstraint(HttpMethod.Post) },
                handler: authHandler
            );

該路由設計會出現如下問題:

  當Url中{apiSetName}對應位置出現點(.)的時候,Url將找不到可以匹配的路由,比如Url: ../apiSets/Bing.Search 將無法找到匹配的路由而報出404錯誤,參照http://stackoverflow.com/questions/11728846/dots-in-url-causes-404-with-asp-net-mvc-and-iis中網友的說法,在一般情況下,當在Url中最后的一塊中出現點號(.)時,MVC將把它當做一個文件來處理,去查找相應的文件,找不到對應的文件就報404錯誤了。

但是Url: ../apiSets/Bing.Search/validate 可以正確的匹配路由,是因為點號(.)出現在Url的中間位置,不是最后一塊,MVC不會將其作為文件處理。

 

現有兩種方式可以解決這個問題:

1、在項目的web.config文件中做如下設置:

  在<system.webServer></system.webServer>節點中添加如下代碼:

    <modules runAllManagedModulesForAllRequests="true"></modules>

這種方式是不推薦的,在 (1)http://bartwullems.blogspot.jp/2012/06/optimize-performance-of-your-web.html 和(2)http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html中都有提及。因為將runAllManagedModulesForAllRequests設置為true之后,將會使所有已注冊的HTTP模塊在每個請求上運行,而不僅僅是托管請求(例如.aspx)。 這意味着模塊將運行在.jpg .gif .css .html .pdf等。這將導致資源的浪費,並且會引發其他的Error。

 

(推薦)2、在web.config中配置如下:

  在<system.webServer></system.webServer>節點中添加如下代碼:

<add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />

    

參考網址:

1.http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx 

2.http://stackoverflow.com/questions/16581184/mvc4-404-errors

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM