您必須映射此路線之前所有其他路線映射(路線按順序評估):
routes.MapRoute(
name: "Product", // any name meaningful for you is right
url: "Product/{productName}",
defaults: new { controller = "Product", action = "CategoryLevel" }
);
這條路線將捕獲所有看起來像這樣的URL:
http://myserver/Product/X
不管X是。如果你這樣做,你的動作應該是這樣的:
public ActionResult CategoryLevel(string productName)
注:該參數名稱必須與路由映射段匹配:productName
所以,每當用戶類型:
http://myserver/Product/Vitamins
將執行動作CategoryLevel
,它將收到productName
參數,其值爲"Vitamins"
的問題是,如果你有你期望被調用這樣
http://myserver/Product/List
動作List
路線將映射,並會調用CategoryLevel
動作與productName
= "List"
爲了避免這個你可以用這條路線:
routes.MapRoute(
name: "Product", // any name meaningful for you is right
url: "ViewProduct/{productName}",
defaults: new { controller = "Product", action = "CategoryLevel" }
);
哪一個會和別人不一樣,什麼都會w ork罰款。此方法特定的URL將如下所示:
http://myserver/ViewProduct/TheProductName
和其他路徑將按預期工作。順便說一句:你應該有一個產品的具體行動,例如View
,而不是CategoryLevel
。因此,路線和動作是這樣的:
routes.MapRoute(
name: "ViewProduct", // any name meaningful for you is right
url: "ViewProduct/{productName}",
defaults: new { controller = "Product", action = "View" }
);
動作,產品控制器內部:
public ActionResult View(string productName)
的路由映射用戶鍵入的URL對應的動作中使用了兩種,並使用一些MVC幫助程序生成URL,如Html.ActionLink
或Url.Action
。所以,如果你做這樣的事情:
Url.Action('View', 'Product', new {productName = "Vitamins"})
你會得到預期的,短網址:
http://myserver/ViewProduct/Vitamins
即路線圖是雙向映射,可以將URL映射到動作,反之亦然。
路由配置是「routes.MapRoute( 名稱: 「默認」, 網址:「{控制器}/{行動}/{id}「, 默認值:new {controller =」Home「,action =」Index「,id = UrlParameter.Optional} ); routes.MapRoute( name:「[clv]」, url:「{controller}/{action}/{id}」, 默認值:new {controller =「Product」,action =「CategoryLevel」,id = UrlParameter。可選} );' – user3166404