Web api – 如何使用slugs进行路由?

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

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

因此,服务器上的路由只是忽略 URL的最后部分。 作为使用这个问题的一个例子,如果有人输入这样的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) {...} 

示例url…

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

然后将参数匹配如下…

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

并且由于slug是可选的,上面的URL仍将匹配

 "questions/31223512" 

这应该符合您的要求。