Web api-如何使用slugs进行路由

本文关键字:路由 slugs 何使用 api- Web | 更新日期: 2023-09-27 18:00:59

我希望能够解析如下链接:

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

因此,在服务器上简单地路由,忽略URL的最后一部分。举个例子,使用这个问题,如果有人输入这样的URL,我如何正确实现路由,它会将我重定向到:

http://stackoverflow.com/questions/31223512

Web api-如何使用slugs进行路由

引用:处理URL模式中的可变段数

有时您必须处理包含变量的URL请求URL段的数目。定义管线时,可以指定如果一个URL的分段数多于模式中的分段数,则额外的分段被认为是最后一个分段的一部分。处理通过这种方式,您可以使用星号(*(。这被称为catch-all参数。一条路线使用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) {...}

示例URL。。。

"questions/31223512/web-api-how-to-route-using-slugs"

然后将参数匹配如下。。。

  • id = 31223512
  • slug = "web-api-how-to-route-using-slugs"

由于slug是可选的,上述URL仍将与匹配

"questions/31223512"

这应该符合您的要求。