在Asp.net MVC Razor中重写包含GUID的URl作为查询字符串

时间:2013-08-27 12:36:52

标签: c# asp.net-mvc-4 razor asp.net-mvc-routing

我正在研究Asp net MVC剃须刀网络应用程序。 我正在尝试实现URL重写。

我的网址就像

/User/CategoryDetail?cid=2&lid=b20319e0-55b1-4233-8c63-c35b98c79a84

但我希望它看起来像

/User/CategoryDetail/[CategoryName]OR[LocationName]

任何曾经建议解决方案实现这一点。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果CategoryName是可选的并且LocationName是必填字段,则Satpal建议可用。如果两个字段都是可选的,那么它不起作用。因为路由无法确定提供哪个属性。在这种情况下,您有两种选择。一种选择是为不同的参数组合加上IRouteConstraints定义3种不同的路径,

routes.MapRoute(name: "CategoryDetail",
url: "/{controller}/{CategoryDetail}/{LocationName}",
defaults: new { controller = "User", action = "Login" },
constraints: {LocationName=@"^\d+$"}
);   

routes.MapRoute(name: "CategoryDetail",
url: "/{controller}/{CategoryDetail}/{CategoryName}",
defaults: new { controller = "User", action = "Login" },
constraints: {CategoryName= new GuidConstraint() }
);   

routes.MapRoute(name: "CategoryDetail",
url: "/{controller}/{CategoryDetail}/{LocationName}/{CategoryName}",
defaults: new { controller = "User", action = "Login", CategoryName = UrlParameter.Optional }
);   

对于GuidConstraint,请访问here。  或者如果你不喜欢几条路线,那么使用here

提供的方法