2017-03-18 78 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 } 
      ); 

可以通过属性的路由来完成。