繁体   English   中英

.NET CORE将Api子域路由到Api控制器

[英].NET CORE route Api sub domain to Api controller

我的Api控制器和MVC控制器。 NET CORE应用程序。

如何路由子域api.mysite.com仅指向Api控制器,而dashboard.mysite.com仅指向同一项目中的Web应用程序?

如果要在单个ASP.NET Core应用程序中实现此功能,则可以执行以下操作:

  1. 在路径/ Api中说出Api控制器可用。 您可以使用路由,区域或应用程序分支来实现此目的。

  2. 使用具有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调用之后定义) 。

注意事项:

  • 当分支“捕获”一个请求时,前缀/ ApiHttpContext.Request.Path属性中删除(并附加到HttpContext.Request.PathBase )。 因此,您需要在UseMvc方法中定义API路由就像请求路径根本没有前缀一样

  • 使用此代码,您有两个单独的管道,但是它们共享在Startup.ConfigureServices中注册的组件。 如果这是不希望的,则可以为每个管道创建单独的DI容器。 但是,这是一个有点高级的话题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM