【问题标题】:Publishing .NET Core 3.1 React application on IIS 8.5 results in API routes not being respected在 IIS 8.5 上发布 .NET Core 3.1 React 应用程序会导致 API 路由不被遵守
【发布时间】:2020-05-30 06:06:02
【问题描述】:

我目前正在尝试挂载使用 dotnet new react 创建的 .NET Core 3.1 MVC 应用程序。该应用程序在通过 Visual Studio Code 运行时运行良好。但是,当使用dotnet publish -c Release -r win81-x64 发布并在 IIS 8.5 中安装应用程序时,API 的路由停止工作,将所有请求发送到 React 页面。

目前我在Startup.cs 中的配置如下所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseSpaStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller}/{action=Index}/{id?}");
    });

    app.UseSpa(spa =>
    {
        spa.Options.SourcePath = "ClientApp";

        if (env.IsDevelopment())
        {
            spa.UseReactDevelopmentServer(npmScript: "start");
        }
    });
}

我制作的测试控制器中的代码如下所示:

namespace Application.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase {

        private readonly ILogger<TestController> _logger;

        public TestController(ILogger<TestController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public async Task<ActionResult<string>> GetTest()
        {
            return "Test";
        }
    }
}

我还尝试创建一个新的 React 项目并安装它,这似乎确实有效。但是,Startup.cs 文件具有完全相同的配置,因此我在我的应用程序上找不到任何要修改的内容。

【问题讨论】:

  • the routes for the APIs stop working, sending all requests to the React page. 你的意思是反应客户端应用程序运行良好,但是当你从浏览器地址栏向端点发出请求时,API 没有正确响应?
  • @FeiHan React 应用可以运行,但是所有 API 响应都返回 React 页面而不是相应的 JSON 响应。

标签: asp.net-core-mvc asp.net-core-3.1


【解决方案1】:

我想通了。原来我上传的第一个版本存在一些问题,导致路由无法正常工作,虽然我立即修复了它,但默认 .NET 项目的 Service Worker 已将损坏的 API 点缓存为站点的一部分。显然,这绕过了开发人员工具中的“禁用缓存”复选框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 2020-02-24
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多