簡體   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