【问题标题】:How to configure Angular 6 URL rewrite in dotnet core using IIS appsettings.json如何使用 IIS appsettings.json 在 dotnet 核心中配置 Angular 6 URL 重写
【发布时间】:2019-08-27 21:28:52
【问题描述】:

我正在使用 IIS 将 Angular SPA 部署到我的 .NET Core 应用程序。

我做了一个生产 Angular 构建(ng build --base-href /ng --deploy-url /ng)并将其部署到 ng 目录中的 wwwroot。

当您手动转到 index.html 的 Angular url 时,我目前可以正常工作:

https://localhost:44316/ng/index.html

但是,如果您刷新或手动导航到某个 url,则会收到 404。

https://localhost:44316/ng/dash

这并不奇怪,因为 Angular 表示这将在没有 URL 重定向的情况下发生。在Angular documentation 中,它说要在 web.config 中插入一个重写规则。

但是,我使用的是 .NET Core,我的一位团队成员告诉我,修改 web.config XML 是旧的做事方式。看来我需要修改 appsettings.json 来实现这个重写规则。

Soo....以前有人做过吗?如果我不修改 web.config 来设置我的转发,我该如何设置?

【问题讨论】:

  • web.config 仍可用于某些配置设置,尤其是在 IIS 中托管时。您的同事是正确的,因为 web.config 不再用于应用程序设置,但您仍然需要它来进行 IIS 配置。

标签: angular .net-core


【解决方案1】:

您是否尝试过使用哈希策略来确认这可能是服务器配置错误? 通常在服务器没有指向“主要角度的页面”时发生404,即您提到的index.html。

要使用哈希策略,您只需将此参数添加到 RouterModule 导入中:

RouterModule.forRoot(routes, {useHash: true})

【讨论】:

  • 不确定这是否可行,但找到了我自己的解决方案(我在此处发布)。
【解决方案2】:

我忘记了我在哪里找到了这个小代码 sn-p,但它成功了。我在 Startup.cs 的 Configure() 中使用了以下内容:

        app.Run(async (context) =>
       {
           context.Response.ContentType = "text/html";
           await context.Response.SendFileAsync(Path.Combine(env.WebRootPath, "ng/index.html"));
       });

基本上,在我的 ng 目录中的所有页面上,它都会加载 index.html(不更改 url)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    相关资源
    最近更新 更多