1 回答

TA貢獻1942條經驗 獲得超3個贊
如果要在單個 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 容器。然而,這是一個有點高級的話題。
- 1 回答
- 0 關注
- 242 瀏覽
添加回答
舉報