【问题标题】:ASP .Core MVC configure application root urlASP .Core MVC 配置应用程序根 url
【发布时间】:2021-10-18 08:42:01
【问题描述】:

我有两个托管在同一个 url 下的 ASP .Core MVC 应用程序。
我已经设法将它们与 Nginx 分开,以便某个路径转到 app-2,而其余路径转到 app-1:
http://host -> app-1
http://host/setup -> @987654327 @

当用户连接到 app-2 时,我的问题就出现了,因为应用程序仍然认为它的 app-root 是 http://host
这会导致客户端在下载样式表时遇到 404,因为 app-2.css 存在于 http://host/setup/css 下,但应用程序在 http://host/css 中搜索。

app-2.cshtml 文件中的“include”行如下所示:

<link rel="stylesheet" type="text/css" href="@Url.Content("~/css/app-2.css")" asp-append-version="true" />

是否有某种方式“覆盖”或告诉app-2 ~ 应该引用&lt;host&gt;/setup/css/ 而不是&lt;host&gt;/css/
我真的不想硬编码它以防 url 在某些时候发生变化。

【问题讨论】:

  • 不完全;我在网络应用程序之间的路由有效,但他们都认为他们的 webroot 是相同的。我能够成功连接到app-2,但它无法下载app-2.css,因为它认为它存在于&lt;url&gt;/css而不是&lt;url&gt;/config/css下。

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


【解决方案1】:

经过数小时的搜索,我发现无法更改整个网络服务器的应用程序根目录。
我最终做的是创建带有选项的类PathHelper并将其添加到Startup.cs

class PathHelper
{
    public PathHelper(IOptions<PathHelperOptions> opt)
    {
        Path = opt.Path;
        
        if (Path.StartsWith('/'))
        {
            Path = Path[1..];
        }
        if (!Path.EndsWith('/'))
        {
            Path = Path + '/';
        }
    }

    public string Path { get; }
}

class PathHelperOptions
{
    public string Path { get; set; }
}

# Startup.cs
public void ConfigureServices(IServiceCollection services)
{
  services
      .AddScoped<PathHelper>()
      .Configure<PathHelperOptions>(opt =>
      {
          opt.Path = this.configuration.GetSection("URL_SUFFIX");
      });

  [...]
}

然后我在.cshtml 文件中使用它,如下所示:

@inject PathHelper helper
<link rel="stylesheet" type="text/css" href="@Url.Content(helper.Path + "css/app-2.css")" asp-append-version="true" />

【讨论】:

    【解决方案2】:

    我认为最简单的方法是在来自“app-2”的页面中包含base 标签。

    试试这样:

    <html>
        <head>
            <base href="http://host/setup">
        </head>
    

    现在您的相关链接已发送到“app-2”。

    【讨论】:

    • 我似乎无法让它工作。将&lt;base href="http://host/setup"&gt; 添加到标题顶部仍会导致从host 加载文件。示例:带有href="favicon.ico" 的图标从http://host/favicon.ico 加载。
    • 尝试在前面添加一个斜杠(/):href="/favicon.ico"
    • 嗯,不。我还测试了将base 硬编码为http://localhost/setup 并将favicon 设置为href="/favicon.ico",但该图标仍从localhost/favicon.ico 加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多