【问题标题】:How to change root path ~/ in Razor in asp.net core如何在asp.net核心的Razor中更改根路径〜/
【发布时间】: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的运气?
  • 不,同样的事情:(

标签: c# razor asp.net-core asp.net-core-mvc


【解决方案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://stackoverflow.com/a/69859449/11813109 未测试

    这是 .NET 7 的里程碑,因此我们只需要等待文档和修复即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      相关资源
      最近更新 更多