如何设置中间件在asp.net核心MVC应用程序中并排运行react和angular应用程序?

时间:2018-07-29 16:37:45

标签: angular reactjs asp.net-core asp-net-core-spa-services

我在同一 asp.net core 2.1应用中有一个 Angular&react应用(clientapp1和clientapp2)。我可以在文件夹 clientapp1 clientapp2 中运行这些应用。他们在自己的端口中运行并且运行良好。

我添加了以下代码来分支路径。我希望在使用端点http://localhost:5000/clientapp1时运行有角度的应用程序,并在运行http://localhost:5000/clientapp2时运行react应用程序。

app.Map("/clientapp1", clientapp1 =>
{
    clientapp1.UseSpa(spa =>
    {
        spa.Options.SourcePath = "ClientApp1";

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

app.Map("/clientapp2", clientapp2 =>
{
    clientapp2.UseSpa(spa =>
    {
        spa.Options.SourcePath = "ClientApp2";

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

在应用程序根文件夹中运行命令dotnet run时,asp.net核心应用程序不起作用。我收到以下错误。该错误表明它将在http://localhost:5000/文件夹中查找文件。

角度:

enter image description here

反应:

enter image description here

我必须设置什么配置才能告诉两个应用程序在哪里寻找文件。

如果将代码clientapp1.UseSpa(spa =>更改为app.UseSpa(spa =>,我可以使它工作。但是副作用是http://localhost:5000/clientapp2不起作用。

1 个答案:

答案 0 :(得分:0)

您必须具有两个脚本,并在脚本中添加--serve-path和--base-href。通常,您在package.json

{
  "name": "client-app",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start:app1": "ng serve --base-href=/clientapp1/ --serve-path=/clientapp1", 
    "start:app2": "ng serve --base-href=/clientapp2/ --serve-path=/clientapp2", 
    "build": "ng build",
     ...
  },
  ....
}

在您的startup.cs中,例如

//for app1
if (env.IsDevelopment())
{
   spa.UseReactDevelopmentServer(npmScript: "start:app1");
}
//for app2
if (env.IsDevelopment())
{
   spa.UseReactDevelopmentServer(npmScript: "start:app2");
}