我希望能够解析像这样的问题的链接:
http://stackoverflow.com/questions/31223512/web-api-how-to-route-using-slugs
因此,服务器上的路由只是忽略 URL的最后一部分。作为使用这个问题的一个例子,如果有人输入这样的URL,我怎样才能正确实现路由,它将我重定向到:
http://stackoverflow.com/questions/31223512
答案 0 :(得分:3)
参考:Handling a Variable Number of Segments in a URL Pattern
有时您必须处理包含变量的URL请求 网址段数。定义路径时,可以指定该路径 如果一个URL的段数多于模式中的段数,则额外的 细分被视为最后一部分的一部分。处理 通过这种方式,您可以使用a标记最后一个参数 星号(*)。这被称为全能参数。一条路线 使用catch-all参数也将匹配不包含的URL 最后一个参数的任何值。
基于约定的路线可以映射为......
config.Routes.MapHttpRoute(
name: "QuestionsRoute",
routeTemplate: "questions/{id}/{*slug}",
defaults: new { controller = "Questions", action = "GetQuestion", slug = RouteParameter.Optional }
);
或者,通过属性路由,路由可能看起来像......
[Route("questions/{id:int}/{*slug?}")]
可以匹配示例控制器动作......
public IActionResult GetQuestion(int id, string slug = null) {...}
示例网址...
"questions/31223512/web-api-how-to-route-using-slugs"
然后将参数匹配如下......
id = 31223512
slug = "web-api-how-to-route-using-slugs"
由于slug
是可选的,因此上述网址仍会与
"questions/31223512"
这应符合您的要求。