Pat*_*ski 4 c# routes asp.net-web-api
我希望能够解析像这个问题这样的链接:
http://stackoverflow.com/questions/31223512/web-api-how-to-route-using-slugs
Run Code Online (Sandbox Code Playgroud)
因此服务器上的路由只需忽略URL 的最后部分。作为使用这个问题的示例,如果有人输入这样的 URL,我如何正确实现路由,它会将我重定向到:
http://stackoverflow.com/questions/31223512
Run Code Online (Sandbox Code Playgroud)
有时您必须处理包含可变数量 URL 段的 URL 请求。定义路由时,您可以指定如果 URL 的段数多于模式中的段数,则多余的段将被视为最后一个段的一部分。要以这种方式处理其他段,请用星号 (*) 标记最后一个参数。这被称为包罗万象的参数。具有 catch-all 参数的路由还将匹配最后一个参数不包含任何值的 URL。
基于约定的路线可以映射为...
config.Routes.MapHttpRoute(
name: "QuestionsRoute",
routeTemplate: "questions/{id}/{*slug}",
defaults: new { controller = "Questions", action = "GetQuestion", slug = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
或者,使用属性路由,路由可能看起来像......
[Route("questions/{id:int}/{*slug?}")]
Run Code Online (Sandbox Code Playgroud)
这都可以匹配示例控制器操作......
public IActionResult GetQuestion(int id, string slug = null) {...}
Run Code Online (Sandbox Code Playgroud)
示例网址...
"questions/31223512/web-api-how-to-route-using-slugs"
Run Code Online (Sandbox Code Playgroud)
然后将参数匹配如下......
id = 31223512 slug = "web-api-how-to-route-using-slugs"因为slug是可选的,所以上面的 URL 仍然会匹配到
"questions/31223512"
Run Code Online (Sandbox Code Playgroud)
这应该满足您的要求。
| 归档时间: |
|
| 查看次数: |
2848 次 |
| 最近记录: |