如何在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 核心中解析 Razor 字符串

在 ASP.NET Core Razor 页面中更改 cshtml 文件的名称

结合 Razor Pages 和 ApiControllers 的应用程序中的 Asp.net 核心异常处理

缩短asp.net core 5 Razor页面中区域的路径

更改 ASP.NET MVC 或 IIS 中的 URL 根路径

在 ASP.NET Core Razor 页面中使用 JavaScript 更改活动导航栏链接