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 是一篇很好的文章。
在 .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 是一篇很好的文章。