如何在asp.net核心的Razor中更改根路径〜/
Posted
技术标签:
【中文标题】如何在asp.net核心的Razor中更改根路径〜/【英文标题】:How to change root path ~/ in Razor in asp.net core 【发布时间】:2018-07-03 13:31:18 【问题描述】:我找不到答案的最简单的问题。
我有一个带有 Razor 的 asp.net core 2.1 MVC 应用程序。
应用程序广泛使用~/path
语法。
如果应用程序从域根目录运行(例如,从 http://localhost:5000/)运行,一切都会很好
但是当我以非 root 用户(例如 http://localhost:5000/app)运行应用程序时,Razor 仍然使用 root (/
) 作为基本路径。
问题:如何配置?如何为 Razor 的~/
指定基本路径?它必须有一个环境变量:)
PS:应用程序在反向代理后面的 docker 中运行。
【问题讨论】:
你是如何使用 "~/" 的?您应该考虑使用@Url.Content
来处理虚拟目录。见why-should-i-use-url-content
嗯,我认为这些是相同的,Razor 将 ~\ 转换为 Url.Content 调用。但是谢谢,我会尝试替换,看看会发生什么。
你有没有使用@Url.Content
的运气?
不,同样的事情:(
【参考方案1】:
在“配置”方法中的“启动”类中使用下一个:
app.UsePathBase("/yourBasePath");
【讨论】:
此解决方案也适用于最少的 API。【参考方案2】:.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();
);
【讨论】:
【参考方案3】:.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
pd:默认路由仍然有效 所以用户可以点击:
/SomeBasePath/api
/api
解决方法:https://***.com/a/69859449/11813109 未测试
这是 .NET 7 的里程碑,因此我们只需要等待文档和修复即可。
【讨论】:
以上是关于如何在asp.net核心的Razor中更改根路径〜/的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET Core Razor 页面中更改 cshtml 文件的名称
结合 Razor Pages 和 ApiControllers 的应用程序中的 Asp.net 核心异常处理
缩短asp.net core 5 Razor页面中区域的路径