2017-03-18 73 views
2

我想爲我的asp.net mvc應用程序自定義URL。目前,我正在asp.net MVC 4.5如何在asp.net中自定義Url mvc

案例:1

Current URL : localhost/Country/Index/param1 
Expected URL : localhost/param1 

案例:2

Current URL : (1) localhost/Country/Index/param1 (Param1 is name of country) 
       (2) localhost/State/Index/param11 (param11 is name of state) 

Expected URL : localhost/param1/param11 (I need second url like this.) 

thanx提前。

+0

你不能。您需要一些方法來區分您的控制器和操作方法(除非您創建一個可查找存儲庫以檢查'param1'匹配現有國家/地區的約束)。然而,你可以通過定義具體的路線 –

+0

Thanx Stephen來生成一個說'../ Country/param1'的網址。是「case -1」嗎? – Ashrafali

+0

這兩個都是可能的,但它意味着創建一個查詢你的國家數據庫的路由約束,並驗證'param1'的值是一個有效的國家。但是,這將被要求每一個請求,所以它不是一個好主意。 –

回答

2

要實現您的結果,只需爲每個事件創建單獨的路由器。

當前可能是您正在使用默認路線,如下所示。

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

或嘗試創建一些不同的路線。

我的建議是爲每個事件創建分離路線。 like: 用param1和param11創建一個路線以獲得所需的結果。

routes.MapRoute(
    name: "Default", 
    url: "param1/param11", 
    defaults: new { controller = "param1", action = "param11", id = UrlParameter.Optional } 
); 

同樣創建另一個事件和方法。

0

ASP.net MVC處理基於路由的請求。路由對從路由表獲取的數據起作用。所以基本上,你必須有至少控制器和action.But MVC爲我們提供了改變,因爲下面的URL的選項:在MVC5相同

routes.MapRoute(
       name: "Test", 
       url: "myURl/{param1}", 
       defaults: new { controller = "myURl", action = "actualActionName", id = UrlParameter.Optional } 
      ); 

可以通過屬性的路由來完成。