![](/img/trans.png)
[英]ASP.NET Core 3.1 : how to route to a controller in a sub folder
[英].NET CORE route Api sub domain to Api controller
我的Api控制器和MVC控制器。 NET CORE应用程序。
如何路由子域api.mysite.com仅指向Api控制器,而dashboard.mysite.com仅指向同一项目中的Web应用程序?
如果要在单个ASP.NET Core应用程序中实现此功能,则可以执行以下操作:
在路径/ Api中说出Api控制器可用。 您可以使用路由,区域或应用程序分支来实现此目的。
使用具有URL重写功能的反向代理(例如,Win上的IIS,Linux上的Nginx)。 配置反向代理,以便将到达api.mysite.com/path的请求作为/ Api / path转发到您的应用程序。
备注:如果要在Api控制器中生成URL,则应从路径中删除/ Api前缀以获取正确的URL(当然,您必须配置反向代理以附加必要的标头,例如X-Forwarded-Host为此,您可以使用此简单的中间件 。
更新
正如评论中所讨论的那样,在这种情况下,应用程序分支似乎是最好的解决方案,因为它为MVC和API应用程序部分启用了单独的管道。
实际上,定义分支非常容易。 您需要做的就是将Map调用放在 Startup类的Configure方法的主管道的开头 :
public void Configure(IApplicationBuilder app)
{
app.Map("/Api", BuildApiBranch);
// middlewares for the mvc app, e.g.
app.UseStaticFiles();
// some other middlewares maybe...
app.UseMvc(...);
}
private static void BuildApiBranch(IApplicationBuilder app)
{
// middlewares for the web api...
app.UseMvc(...);
}
现在,当请求到达并且其路径以/ Api开头时,该请求将“偏转”并通过分支管道(在BuildApiBranch方法中定义),而不是通过主管道(在Configure方法中,在Map调用之后定义) 。
注意事项:
当分支“捕获”一个请求时,前缀/ Api从HttpContext.Request.Path属性中删除(并附加到HttpContext.Request.PathBase )。 因此,您需要在UseMvc方法中定义API路由 , 就像请求路径根本没有前缀一样 。
使用此代码,您有两个单独的管道,但是它们共享在Startup.ConfigureServices中注册的组件。 如果这是不希望的,则可以为每个管道创建单独的DI容器。 但是,这是一个有点高级的话题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.