【问题标题】:dotnet build - get error "could not return the default page '/index.html'"dotnet build - 出现错误“无法返回默认页面 '/index.html'”
【发布时间】:2019-01-30 01:41:15
【问题描述】:

尝试将我的项目生成为exe文件,但出现错误:

之前:“dotnet build -r win10-x86”没问题

运行生成的exe后,一切正常:

indows DPAPI to encrypt keys at rest.
Hosting environment: Production
Content root path: C:....\currencyColution\correncyProject\bin\Debug\netcoreapp2.1\win10-x86
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.

加载页面损坏后,更准确地说是找不到 index.html:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:5000/
fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLG91TC2H0UO", Request id "0HLG91TC2H0UO:00000001": An 

unhandled exception was thrown by the application.
System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request.
Your application is running in Production mode, so make sure it has been published, or that you have built your SPA manually. Alternatively you may wish to switch to the Development environment.

Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.AngularCli;
using Microsoft.Extensions.DependencyInjection;
using Swashbuckle.AspNetCore.Swagger;
using System;
using System.IO;
using Microsoft.AspNetCore.Http;

namespace AspNetCore2Ang6Template
{
  public class Startup
  {
  
    public void ConfigureServices(IServiceCollection services)
    {
      services.AddMvc();
      services.AddSpaStaticFiles(c =>
      {
        c.RootPath = "wwwroot";
      });

    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }

      app.UseDefaultFiles();
      app.UseStaticFiles();
      app.UseSpaStaticFiles();
      app.UseMvc(routes =>
      {
        routes.MapRoute(name: "default", template: "{controller}/{action=index}/{id}");
      });

      app.UseSpa(spa =>
      {
        spa.Options.SourcePath = "wwwroot";
      });

    }
  }
}

我不使用angular和其他一些,只是尝试打开wwwroot/index.html

文件:

货币项目

wwwroot

Program.cs

Startup.cs

在 VS 中测试,一切正常,但不是通过 exe builder

像 dev : dotnet run 一样启动,然后它可以在 localhost:58893/ 上运行,但是在 localhost:5000 上构建 prod dotnet 有什么问题

启动设置:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:58842/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "AspNetCore2Ang6Template": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:58893/"
    }
  }
}

【问题讨论】:

  • 我也尝试过这样做,它对我有用。你如何启动exe?任何参数添加或smth?您使用的是哪个版本的 .Net?
  • @Zysce, Microsoft.AspNetCore.All 2.1.2, Microsoft.AspNetCore.SpaServices 2.1.1, exe 作为管理员和用户启动,没有任何参数
  • @Zysce,可能是 Port, 5000, 5001 设置 exe builder,但通过 IDE 端口是 58843 并且可以正常工作
  • @Zysce,我在 VMware Fusion 上使用 Windows 10,dotnet 2.1.4
  • @Zysce,像 dev : dotnet run 一样启动,然后它可以在 localhost:58893/ 上运行,但是在 localhost:5000 上构建的 prod dotnet 有什么问题

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


【解决方案1】:

检查 angular.json 文件使用"outputPath": "dist",

和启动文件

 services.AddSpaStaticFiles(configuration =>
      {
        configuration.RootPath = "ClientApp/dist";
      });

【讨论】:

  • 这些选项是在我的环境中设置的,但是我仍然遇到同样的错误。
【解决方案2】:

通过比较现有的 Angular Asp net core 模板解决了这个问题,我做了以下代码更改。

在 csproj 文件中:

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
 <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
 <IsPackable>false</IsPackable>
 <SpaRoot>ClientApp\</SpaRoot>
 <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>

 <!-- Set this to true if you enable server-side prerendering -->
 <BuildServerSideRenderer>false</BuildServerSideRenderer>
 <UserSecretsId>baa2f579-d2a7-4eb4-89fb-1c171b2e2482</UserSecretsId>
 <TypeScriptToolsVersion>3.0</TypeScriptToolsVersion>

<ItemGroup>
 <TypeScriptCompile Include="App\src\app\models\user.ts" />
 <TypeScriptCompile Include="App\src\app\utils\AppContants.ts" />
 <!-- Don't publish the SPA source files, but do show them in the project files list -->
 <Content Remove="$(SpaRoot)**" />
 <None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
</ItemGroup>

<ItemGroup>
 <Folder Include="Properties\PublishProfiles\" />
</ItemGroup>

<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
 <!-- Ensure Node.js is installed -->
 <Exec Command="node --version" ContinueOnError="true">
   <Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
 </Exec>
 <Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
 <Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
 <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
</Target>

<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
 <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
 <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
 <Exec WorkingDirectory="$(SpaRoot)" Command="ng build --prod" />
 <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " />

 <!-- Include the newly-built files in the publish output -->
 <ItemGroup>
   <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
   <DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" />
   <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
     <RelativePath>%(DistFiles.Identity)</RelativePath>
     <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
   </ResolvedFileToPublish>
 </ItemGroup>
</Target>

在 Startup.cs 中

services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });

 app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp";
                if (env.IsDevelopment())
                {
                    spa.UseAngularCliServer(npmScript: "start");
                }
            });

在 Angular angular.json 中

 "options": {
    "outputPath": "dist",

【讨论】:

  • 我认为您的意思是 angular.json 不是 package.json。不过我很惊讶,因为您使用的是 SSR。您的 outputPath 不需要是“dist/browser”吗?你修改了package.json 的哪个部分?
【解决方案3】:

问题出在使用命令 dotnet build 构建项目时,没有复制 wwwroot 文件夹。

我重现了您的问题,为了解决它,我复制了输出中的文件夹并且它起作用了。

您应该使用发布命令来测试生产。

在任何一种情况下,这两个命令都不会复制 wwwroot 文件夹。

这是一个修复:https://github.com/aspnet/websdk/issues/114

【讨论】:

【解决方案4】:

就我而言,这是因为我添加了一个名为“LocalDevelopment”的新环境,但没有更新 Startup.cs 中 IsEnvironment 调用的目标

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

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

【讨论】:

    【解决方案5】:

    我在 git 分支切换后发生了这种情况。
    我不得不再次安装节点模块:

    npm install    
    

    来自 GitHub 上的 answer。请注意,此解决方案仅在您将 Node.js 用作前端堆栈的一部分时才有帮助。

    【讨论】:

      【解决方案6】:

      我发现发生此错误的另一个原因是您的控制器路由属性与请求 URL 不完全匹配。

      例如,您的客户请求是:

      https://myapp/myapi/mycontroller/myapiaction
      

      但您的 dotnet 应用程序中的控制器与预期端点的属性不匹配

      // Note api in the route doesn't match myapi in the request
      [ApiController]
      [Route("api/[controller]/[action]")] 
      public class MyController
         :
         :
      

      【讨论】:

        猜你喜欢
        • 2021-06-17
        • 2020-09-04
        • 2021-09-25
        • 1970-01-01
        • 2011-03-16
        • 2012-07-15
        • 2015-02-19
        • 2014-05-04
        • 2023-04-01
        相关资源
        最近更新 更多