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

时间:2018-08-09 12:40:18

标签: c# asp.net-core

.NET CORE 应用程序中有 Api 控制器和 MVC 控制器。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 使Api控制器在路径 / Api 中可用。您可以使用路线,区域或application branches

  2. 使用能够进行URL重写的反向代理(例如Win上的IIS,Linux上的Nginx)。配置反向代理,以便将到达 api.mysite.com/path 的请求作为 / Api / path 转发到您的应用程序。

备注: 如果要在Api控制器中生成URL,则应从路径中删除 / Api 前缀以获得正确的URL(当然,您必须配置反向代理以添加必要的标头,例如< em> X-Forwarded-Host 等)。为此,您可以使用简单的middleware

更新

正如评论中所讨论的,在这种情况下,应用程序分支似乎是最好的解决方案,因为它为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 方法中定义)遍历主管道(在 Map 调用之后在 Configure 方法中定义)。

有些事情要记住:

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

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