2014-07-07 56 views
0

我只有1個控制器,只有在我的例子這樣有1個動作:MVC的行動沒有得到所謂的

// 
// GET: /Home/ 
public ActionResult Index(string source,string id) 
{ 
    return View(); 
} 

我有2條路線這樣的動作註冊 - :

routes.MapRoute(
       name: "Default2", 
       url: "{source}/{id}", 
       defaults: new { controller = "Home", action = "Index" } 
      ); 

      routes.MapRoute(
       name: "Default", 
       url: "", 
       defaults: new { controller = "Home", action = "Index", source="source1", id = UrlParameter.Optional } 
      ); 

當我打電話默認,它調用Index動作,當我打電話時這是OK ,/source1/12 - 它的工作原理。

但是,當我這樣調用/source1/12.0 - 它不工作,並顯示了404 ..

任何人都可以說明爲什麼會出現這種情況?

+0

可以顯示源行動? –

+0

它是導致你的行動會像 '公衆的ActionResult源(INT ID)' –

+0

公衆的ActionResult指數(字符串源字符串ID) { 返回查看(); } – user3359453

回答

0

它可能將.0解釋爲文件擴展名,從而在磁盤上查找文件。你可以替換「。」用「_」表示重定向,並將其替換回您的操作方法中?否則,您必須查看可以讓路由不將「.0」解釋爲文件擴展名的方式。不知道究竟如何關閉我的頭頂...

MVC將類似這樣的錯誤路由到特殊方法。一個在控制器中:HandleUnknownAction,當動作無法匹配時調用。您可以覆蓋它並在那裏處理操作(記錄等)。

0

檢查this文章,它有你的解決方案:

從鏈接:

<configuration> 
    <system.web> 
    <httpRuntime relaxedUrlToFileSystemMapping="true"/> 

    <!-- ... your other settings ... --> 
    </system.web> 
</configuration> 
0

變化ROuteCOnfig到:

routes.MapRoute(
      name: "Default2", 
      url: "{source}/{id}/", 
      defaults: new { controller = "Home", action = "Index" } 
     ); 

應該解決您的問題。

您還可以檢查此SO Thread

+0

我已經試過了,它沒有幫助.. – user3359453

+0

檢查SO線程 –