1

我正在开发 Asp net MVC razor web 应用程序。我正在尝试实现 URL 重写。

我的网址就像

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

但我希望它看起来像

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

任何人都可以提出解决方案来实现这一点。提前致谢。

4

1 回答 1

1

Satpal 建议适用于 CategoryName 是可选字段且 LocationName 是必填字段的情况。如果两个字段都是可选的,则它不起作用。因为路由无法确定提供了哪个属性。在这种情况下,您有两个选择。一种选择是为不同的参数组合加上 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,请访问这里

于 2013-08-28T14:49:54.893 回答