如何在ASP.NET Core中更改Razor的根路径~/

18
我有一个使用Razor的ASP.NET Core 2.1 MVC应用程序,广泛使用~/path语法。
如果应用程序从域根目录运行(例如,从http://localhost:5000/),一切都很顺利。
但是,当我在非根位置运行应用程序时(例如,http://localhost:5000/app),Razor仍然将根路径(/)作为基本路径。
我该如何配置这个?我想为Razor的~/指定一个基本路径。肯定有一个环境变量可以设置。
附注:该应用程序在反向代理后的Docker中运行。

1
你如何使用 "~/" ? 你应该使用 @Url.Content 来处理虚拟目录。查看 why-should-i-use-url-content 了解详情。 - SpruceMoose
嗯,我以为那些是一样的东西,而Razor会将~\转换为Url.Content调用。但是谢谢,我会尝试替换并看看会发生什么。 - STO
你使用@Url.Content有什么好的效果吗? - SpruceMoose
不,仍然一样 :( - STO
3个回答

12
在您的“Startup”类中的“Configure”方法中使用以下代码:
app.UsePathBase("/yourBasePath");

此解决方案也适用于最小API。 - Flimtix
1
这在.NET 6中仍然是正确的方法吗?我已经尝试过了,但没有成功。 - Anish
@Anish 请参考这里的其他答案,其中建议在.NET 6中使用app.UseRouting(); - TylerH

3
对于 .NET Core 3.1,我使用以下代码:context.Request.PathBase
app.Use((context, next) =>
{
    context.Request.Scheme = schemeValue;
    #if !DEBUG
    context.Request.PathBase = $"/{applicationOptions.BasePath}";
    #endif
    return next();
});

1
这个解决方案在 RazorPages .NET 6 上对我有效,而 UsePathBase 中间件无效。 - J.Loscos

2

.NET 6中,您需要添加app.UseRouting();,并像这样:

var app = builder.Build();

app.UsePathBase("/SomeBasePath");

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
  app.UseSwagger();
  app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.MapControllers();

app.Run();

来自里程碑: https://github.com/dotnet/aspnetcore/issues/38448

附注:默认路由仍然可用,因此用户可以访问:

/SomeBasePath/api
/api

解决方案思路:https://dev59.com/JWsMtIcB2Jgan1znvGgn#69859449(未经测试)

.NET 7是一个里程碑式的版本,我们只需要等待文档和修复即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接