发布后的应用程序中,.Net Core React SPA 路由出现问题。

4
我有一个使用React作为前端的.NET Core 2.2 SPA。在React端,我使用href简单地进行后端的GET调用。
<a href={`http://localhost:5004/api/Reports?team=${this.state.teamName}&project=${this.state.projectName}`} class="button">Submit</a>

当我从Visual Studio调试应用程序时,路由处理正确,并调用后端控制器下载文件。
当我将应用程序发布为自包含的exe文件时,似乎React应用程序拦截了路由,因此在单击按钮时显示SPA回退URL,并且当我尝试直接在浏览器中进行该API调用时也是如此。
我已经尝试从app.UseMVC中删除MapSpaFallbackRoute部分,以及传递完整URL和部分URL,但无论哪种方式都无法正确路由到控制器。
以下是启动时的路由设置。
app.UseMvc(routes =>
      {
        routes.MapRoute(
                  name: "default",
                  template: "{controller}/{action=Index}/{id?}");

        routes.MapSpaFallbackRoute(
          name: "spa-fallback",
          defaults: new { controller = "Home", action = "Index" });
      });

除了UseSpa部分之外

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

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

在发布与通过Visual Studio运行时,路由表现不同的原因是什么?

请查看这个问题及其答案。 - Dušan
2个回答

0

我遇到了一个非常类似的问题。我正在使用VS2019开发ASP.NET Core / ReactJS应用程序。在开发过程中,关于调用.NET API后端的一切都很正常,但是当我部署到生产环境时,在浏览器中导航到API调用的路由会返回React应用程序而不是API调用。如果我在浏览器中对这些页面进行强制重新加载,则会返回API响应而不是React应用程序。

我通过删除默认包含在React / JS项目中的registerServiceWorker调用来解决此问题。我能够使用浏览器开发人员工具(F12)并选择应用程序选项卡来检查服务工作的存在。


1
在我的情况下,是由于愚蠢的serviceworker引起的。我从我的索引中删除了register方法调用,现在路由正常工作。它带来的问题比好处还多。 - Ilias.P

0

我曾经遇到过同样的问题,后来发现我的API在IIS上启动时出了问题。因此,对/api的请求无法解析并回退到React应用程序。我解决了API问题,现在/api可以访问控制器。

所以,请确保修复任何API问题并确保控制器服务器正常运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接