Web api - 如何使用slug进行路由?

时间:2015-07-04 17:47:06

标签: c# asp.net-web-api routing

我希望能够解析像这样的问题的链接:

http://stackoverflow.com/questions/31223512/web-api-how-to-route-using-slugs

因此,服务器上的路由只是忽略 URL的最后一部分。作为使用这个问题的一个例子,如果有人输入这样的URL,我怎样才能正确实现路由,它将我重定向到:

http://stackoverflow.com/questions/31223512

1 个答案:

答案 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"

这应符合您的要求。