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

本文关键字:URl 字符串 查询 GUID 包含 net Asp MVC Razor 重写 | 更新日期: 2023-09-27 18:29:06

我正在开发Asp-netMVC剃刀式web应用程序。我正在尝试实现URL重写。

我的Urls就像

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

但我希望它看起来像

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

可以为实现这一点的解决方案提出任何建议。提前谢谢。

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

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

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,请访问此处。