这是设计使然根据这个 Github 问题 https://github.com/aspnet/HttpAbstractions/issues/893.
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?}");
});
}