为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕容708150 2021-11-21 16:13:08
我有阿比控制器和MVC在我的控制器。NET 核心应用程序。如何将子域api.mysite.com路由到仅指向Api控制器,并将dashboard.mysite.com路由到同一个项目中的所有 Web 应用程序?
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

如果要在单个 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 应用程序部分启用了单独的管道。

实际上,定义分支非常容易。您需要做的就是在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调用之后) .

要记住的一些事情:

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

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


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信