2012-11-28 55 views
1

我一直在測試一些需要支持的站點的替代方案,例如:帶有一個可選參數的ASP.NET MVC路由site.com/optionalparameter

site.com 
site.com/Controller/Action/id 
site.com/various.aspx 
site.com/optionalparameter <-- these two go to the same controller 
site.com/optionalparameter/ <-- these two go to the same controller 

我真的需要驗證,如果可選參數是可以接受的,但我可以直接到控制器,將驗證它。其他規則似乎工作到目前爲止,但我還沒有能夠得到單個可選參數的工作。

url中的可選參數可以帶或不帶斜槓「/」(至少不帶)。我發現類似的問題,但他們似乎有「optionalParam/xx/yy」,所以規則有更多的參數,他們似乎工作正常,但這是一個特殊情況轉換非mvc網站使用MVC路由。

我試圖做的一個例子,但沒有工作。

routes.MapRoute(
    "optionalParamRoute", 
    "{name}", 
    new { controller = "Home", action = "Index", name = "" } 
); 

這可能嗎?

+1

optionalParamRoute - 我試了一下,definetly工作,也許你有在路由配置其他路由匹配其中** site.com/optionalparameter **這就是爲什麼它不起作用 – testCoder

+0

是的你是正確的,將它移動到RegisterRoutes的頂部捕捉它。謝謝! – lko

+0

請選擇標記我的答案是正確的。 – testCoder

回答

0

嘗試移動到頂部您optionalParamRoute參數:

routes.MapRoute(
    "optionalParamRoute", 
    "{name}", 
    new { controller = "Home", action = "Index", name = "" } 
); 

// other routes 
+0

我RegisterRoutes中的其他規則干擾單個可選參數,以及應用程序中與「可選參數」具有相同名稱的「文件夾」。請注意,只要存在具有相同名稱的文件夾,即使規則正確,它也會忽略MapRoute。 – lko

+1

設置'routes.RouteExistingFiles = true'來防止這種情況發生 – Richard