首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用正则表达式匹配路由部分中的部分url?WebAPI .NET核心2.2

问如何使用正则表达式匹配路由部分中的部分url?WebAPI .NET核心2.2
EN

Stack Overflow用户
提问于 2019-04-22 14:03:38
回答 1查看 4.4K关注 0票数 0

我现在正在尝试编写一个WebApi应用程序。在路由部分(控制器),我想使用正则表达式来匹配url的一部分。然而,"/"似乎不能被很好地识别。

例如,接口url为"api/books/science/list"。我要带上"api/books/science"和"list"。我尝试了下面的正则表达式[HttpGet("{url=.*}/list")]。但是似乎正则表达式不起作用。".*"不能与"\"匹配。

接口设计类似于"api/*{path}/list"。对于*{path},它可能有多个结构,如books/science或books/art/Asia'。我想使用正则表达式来匹配它们,然后它们可以用于以下操作。

实际上,我已经尝试了另一种方法来获取url [HttpGet("{**url}")]。但我认为这不是一个很好的解决方案,因为我需要解析url。

EN

回答 1

Stack Overflow用户

发布于 2019-04-22 14:12:48

通过:regex()参数支持正则表达式。有关信息,请参阅Regex上的ASP.NET核心文档中的路由,例如Routing Middleware。

Try:[HttpGet("{url:regex(.*)}/list")]正如您所指出的,这不起作用,因为它对路由url的标记化的值起作用。

一种替代方法是在路由中使用catch-all (在Startup.cs中):

代码语言:javascript
复制
routes.MapRoute(
    name: "therest",
    template: "/{**url}",
    defaults: new { controller = "Home", action="Index"} // Send to /home/index
);

或者,如果您知道path元素的数量有限,则可以简单地将它们全部包含在内:

代码语言:javascript
复制
[HttpGet("/{url1}")]
[HttpGet("/{url1}/{url2}")]
[HttpGet("/{url1}/{url2}/{url3}")]
[HttpGet("/{url1}/{url2}/{url3}/{url4}")]
public IActionResult Test(string url1 = null, string url2 = null, string url3 = null, string url4 = null)
{
    var url = string.Join("/", url1, url2, url3, url4);
    //... return View();
}

我认为另一种选择是在中间件中编写一些额外的路由代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55789850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档