Asp.net-Mvc

asp.net mvc 沒有收到帶有句點的 GET 請求

  • October 19, 2016

我正在使用 .net4.5rc 和 MVC4.0rc

下面的程式碼取自 MVC webapi 應用程序,但我對於 reular asp.net mvc 有相同的行為

我的 registerroutes 程式碼如下所示

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

           routes.MapHttpRoute(
               name: "R1",
               routeTemplate: "product/{id}",
               defaults: new { 
                               controller="Product",
                               id = RouteParameter.Optional 

                             }
           );

這適用於其中沒有句點的 ID。但是,當我要一個帶有句點的產品時,呼叫似乎沒有到達 ASP.NET

當我按照類似文章的建議使用下面的設置時,它在有尾隨 / 但沒有它時不起作用

總之

http://mysite.com/product/AZ0     //works
http://mysite.com/product/AZ.0/   //work with relaxedUrlToFileSystemMapping
http://mysite.com/product/AZ.0    //does not work

響應是 404,我猜這是 IIS 返回的,不涉及 ASP.NET。當我使用上面最後一個 URL 執行 routedebugger 時,我什至沒有得到 routedebugger 的東西

當有一個帶有模式的 URL 時,我如何讓 IIS 將控制項傳遞給 ASP.NET:mysite.com/product/{id},無論 id 中是否有句點。

謝謝。

讓我自己回答這個問題。添加 URL 重寫解決了這個問題。下面添加到 web.config 中的程式碼告訴如果 URL 的格式為 (product/ ),則用結尾的“/”重寫 Url *。*然後它不再作為文件處理,而是作為正常 MVC 處理。

 <system.webServer>
  ....   
   <rewrite>
     <rules>
       <rule name="Add trailing slash" stopProcessing="true">
         <match url="(product/.*\..*[^/])$" />
         <action type="Rewrite" url="{R:1}/" />
       </rule>
     </rules>
   </rewrite>
 </system.webServer>

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