我希望能够解析像这个问题这样的链接:
http://stackoverflow.com/questions/31223512/web-api-how-to-route-using-slugs
所以简单地在服务器上路由ignoringURL 的最后一部分。作为使用这个问题的示例,如果有人输入这样的 URL,我如何正确实现路由,它会将我重定向到:
http://stackoverflow.com/questions/31223512
参考资料:处理 URL 模式中可变数量的段
有时您必须处理包含变量的 URL 请求
URL 段的数量。当您定义路线时,您可以指定
如果 URL 的段数多于模式中的段数,则额外的
段被认为是最后一个段的一部分。处理
以这种方式附加段,您可以用一个标记最后一个参数
星号 (*)。这被称为包罗万象的参数。一条路线
带有 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
是可选的,上面的 URL 仍然会匹配到
"questions/31223512"
这应该满足您的要求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)