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

我有阿比控制器和MVC在我的控制器。NET 核心应用程序。

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


慕容708150
浏览 217回答 1
1回答

手掌心

如果要在单个 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 应用程序部分启用了单独的管道。实际上,定义分支非常容易。您需要做的就是在Startup类的Configure方法中的主管道的开头放置一个Map调用: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 容器。然而,这是一个有点高级的话题。
打开App,查看更多内容
随时随地看视频慕课网APP