7

我使用.net4.5rc與MVC4.0rcasp.net的MVC沒有收到一個時期的GET請求它

下面的代碼是從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 

           } 
      ); 

這與沒有在其中一段IDS效果很好。然而,當我要求一個產品有一段時間,呼叫似乎並沒有得到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返回。 當我運行routedebugger用類似上面的最後一個網址,我甚至不得到routedebugger東西

如何讓IIS通過控制到ASP.NET時,有一個模式的網址: 無論id是否存在一段時間,mysite.com/product/{id}。

謝謝。

回答

7

讓我自己回答。添加URL重寫可解決問題。 添加到web.config中的代碼告訴如果URL是表單的形式(產品/ ),則用URL尾部的「/」來重寫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>