如何在禁用根路徑訪問的同時設置 ASP.NET Core 應用程序的基本路徑?
我知道我可以使用設置我的服務的基本路徑,
app.UsePathBase("/AppPath");以便我的 API 可用,http://example.com/AppPath/controller1但如果我這樣做,我的 API 也可以從根路徑獲得http://example.com/controller1。如何禁用從根路徑的訪問?我也嘗試使用這樣的路線,
app.UseMvc(routes => routes.MapRoute("default", "IRate/{controller}/{action}/{id?}"));但它有同樣的問題。我想這樣做的原因是,當它部署在生產環境中時,它將部署在應用程序前綴下(而不是作為根應用程序),並且當我在調試期間在本地主機上執行 API 時,我想模擬生產條件。
這是根據這個 Github issue設計的。
UsePathBase 主要是為了讓這些段遠離你,因為它們是一個部署細節,如果它們留下來,它會弄亂你的路由。
考慮替代方案。如果要禁用根路徑,它會怎麼做?404 並不合適,大概該路徑在託管根的站點的單獨實例上可用。如果您真的想要 404,可以使用如上所示的 Map。
如果要在訪問根目錄時返回 404,可以使用嵌套映射,該問題中對此進行了描述:
在這種情況下,您可能想要更接近這個的東西,嵌套
MapMiddleware:public void Configure(IApplicationBuilder app) { app.Map("/basepath", mainapp => { mainapp.Map("/ping", map => map.Run(async ctx => await ctx.Response.WriteAsync("pong"))); mainapp.UseMvc(); }); }通過這種方式,您只為來自. 的請求指定映射、路由等
/basepath。其他所有內容都被丟棄並返回 404。您必須記住呼叫
mainapp而不是app所有配置呼叫。否則,您最終可能會得到指向根目錄而不是自定義基本路徑的腳本和 css URL。您可以通過將配置程式碼提取Configure(app,env)到單獨的方法中來避免這種情況,例如:public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.Map("/AppPath", mainapp => { mappedConfigure(mainapp,env); }); } private void mappedConfigure(IApplicationBuilder app,IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }