Url 在 Asp.Net 核心 3.0 中重写

Url Rewriting in Asp.Net core 3.0

在 .Net Core web API 中,我希望端点以两种方式工作,例如:/api/order/order

所以我尝试了很多正则表达式模式来将 url 重写为除了“api”,但还没有成功。 在启动配置中:

var rewrite = new RewriteOptions()
       .AddRewrite("^(?!api\/).*$", "/api/", true)
       .AddRedirectToHttps();
 app.UseRewriter(rewrite);

我认为我的方法可能是错误的。

订单控制器:

    [Route("api/[controller]")]
    [ApiController]
    public class OrderController : ControllerBase
    {

为什么不只使用两个路由属性而不是一个...

[Route("api/[controller]")]
[Route("[controller]")]
public class OrderController : ControllerBase

会起作用,您甚至可以使用这些属性设置基本控制器 class,而无需再次处理它(我认为)

经过多次尝试,我找到了答案。要是 Regex 能简单一点就好了。

.AddRewrite("^(?!api\/)(.*)$", "api/", true)

.* 需要放在括号中并且重写值不需要前面的正斜杠。

this article 中的正则表达式示例让我找到了自己的方法。

为了了解重写器背后的内容,我需要添加另一个中间件来记录传入的 http 请求。 Here 是一篇很好的文章。