C# 获取blazor.webassembly.js的404 NotFound(_frameworkfiles NotFound)

C# 获取blazor.webassembly.js的404 NotFound(_frameworkfiles NotFound),c#,blazor,webassembly,.net-5,C#,Blazor,Webassembly,.net 5,我们搜索了这方面的其他问题,发现它们似乎适用于站点部署后的情况。 在VS2019中尝试调试时会发生这种情况。 到目前为止,我们检查的内容包括: applicationhost.config看起来是正确的,虚拟目录路径确实是“客户端”应用程序的根目录 wwwroot文件夹是物理路径的子文件夹 <site name="Eclypses.MTE.Protoype.Server" id="8"> <application path=&q

我们搜索了这方面的其他问题,发现它们似乎适用于站点部署后的情况。 在VS2019中尝试调试时会发生这种情况。 到目前为止,我们检查的内容包括:

applicationhost.config看起来是正确的,虚拟目录路径确实是“客户端”应用程序的根目录 wwwroot文件夹是物理路径的子文件夹

 <site name="Eclypses.MTE.Protoype.Server" id="8">
    <application path="/" applicationPool="Eclypses.MTE.Protoype.Server AppPool">
      <virtualDirectory path="/" physicalPath="D:\git_src\mteutils_dotnetcore\eclypses-commander-prototype\Eclypses.MTE.Prototype\Client" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:50413:localhost" />
    </bindings>
  </site>
服务器的launchsettings.json文件为:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:50413",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "use64Bit": true,
      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}"
    },
    "Eclypses.MTE.Prototype.Server": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}"
    }
  }
}
通过取消选中属性页上的“启用SSL”复选框,我们将两者上的sslPort更改为“0”。(我们尝试使用SSL,但得到了相同的错误)

我们还注释掉了服务器启动类中的行:

// app.UseHttpsRedirection();
因此,我们应该在VS2019中运行纯http环境(目前版本为16.8.5)

最后,我们确保客户端和服务器都使用最新版本的适当NuGet软件包: 客户:

客户端的Program.cs类按以下顺序配置:

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseWebAssemblyDebugging();
    }
    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.UseBlazorFrameworkFiles();
    app.UseStaticFiles();
    // app.UseHttpsRedirection();
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapControllers();
        endpoints.MapFallbackToFile("index.html");
    });
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");

builder.Services
    .AddBlazoredModal()
    .AddOptions()
    .AddAuthorizationCore()
    .AddSingleton<ISessionStorageService, SessionStorageService>() // Wrapper around javascript session storage methods
    .AddScoped<IAuthService, AuthService>() // Wrapper around API calls to server to authenticate a login
    .AddScoped<AuthenticationStateProvider, MyWebAuthenticationStateProvider>() // Creates a user principal
    .AddSingleton<StateContainer>();  // Wrapper around some local "state" values

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

await builder.Build().RunAsync();
var builder=WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add(“应用程序”);
建筑商服务
.AddBlazoredModal()
.AddOptions()
.AddAuthorizationCore()
.AddSingleton()//javascript会话存储方法的包装器
.addScope()//包装对服务器的API调用以验证登录
.addScope()//创建用户主体
.AddSingleton();//包装一些本地“状态”值
addScope(sp=>newHttpClient{BaseAddress=newURI(builder.HostenEnvironment.BaseAddress)});
等待builder.Build().RunAsync();
在研究了多个帖子之后,我们觉得上面的内容是我们需要检查的。从我们的理解来看,它们看起来是正确的 我们仍然可以从_framework和_content文件夹中加载任何内容,更重要的是,“blazor.webassembly.js”文件根本不存在

启动调试会话时,VS中会出现一个图标 “脚本文档” 在它里面是一个图标 “localhost:50413/js/sessionStorage.js” 因此,wwwroot似乎是由运行时找到的,但是没有“_framework”或“_content”文件夹,因此它无法加载我的blazor WASM文件。 当我们终止调试会话时,此图标将消失

此外,如果我们在Chrome中查看network选项卡,我们会看到下载的wwwroot文件的内容带有一个“200”,但是blazor.webassembly.js(应该在_框架中)得到一个404


这里的任何指导都是值得赞赏的,基本问题是“我们为什么要获得“404”的框架和内容文件?

请确保您的服务器包含对您的客户的项目引用。 还要确保您客户的csproj文件使用

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

net5.0

确保您的服务器包含对客户端的项目引用。 还要确保您客户的csproj文件使用

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

net5.0

你能确认你的调试启动项目是WASM服务器项目吗?我可能错过了你所有的细节。基本上,
是要使用的库,使用的是
app.UseBlazorFrameworkFiles()
应该映射到
\u Framework
。启动应用程序时,如果您尝试直接转到URL,您会看到什么http://localhost:50413/_framework/blazor.webassembly.js?获取404。我不仅将eclypse.MTE.Prototype.Server作为启动项目(失败),而且还单击了“服务器”项目,并单击“调试”,但出现相同的故障。我在blazor.webassembly.js文件stillapp.UseBlazorFrameworkFiles()中得到了404;服务器上my startup.cs中的第87行是否正常,找到问题并为其他人的利益发帖。似乎我的服务器项目不知何故没有对我的客户机的“项目引用”。我修复了这个问题,然后再次检查了Can you just,确认要调试的启动项目是WASM服务器项目。我可能错过了你所有的细节。基本上,
是要使用和使用的库
app.UseBlazorFrameworkFiles()应该映射到
\u框架
。当您启动应用程序时,如果您尝试直接转到URL
http://localhost:50413/_framework/blazor.webassembly.js
?得到一个404。我不仅将Eclypses.MTE.Prototype.Server作为我的启动项目(失败),而且我还单击了“服务器”项目并单击了“调试”,但同样失败。我在blazor.webassembly.js文件stillapp.UseBlazorFrameworkFiles()中得到了404;服务器上my startup.cs中的第87行是否正常,找到问题并为其他人的利益发帖。似乎我的服务器项目不知何故没有对我的客户机的“项目引用”。我把它修好了,然后重新检查了
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>
</Project>
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseWebAssemblyDebugging();
    }
    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.UseBlazorFrameworkFiles();
    app.UseStaticFiles();
    // app.UseHttpsRedirection();
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapControllers();
        endpoints.MapFallbackToFile("index.html");
    });
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");

builder.Services
    .AddBlazoredModal()
    .AddOptions()
    .AddAuthorizationCore()
    .AddSingleton<ISessionStorageService, SessionStorageService>() // Wrapper around javascript session storage methods
    .AddScoped<IAuthService, AuthService>() // Wrapper around API calls to server to authenticate a login
    .AddScoped<AuthenticationStateProvider, MyWebAuthenticationStateProvider>() // Creates a user principal
    .AddSingleton<StateContainer>();  // Wrapper around some local "state" values

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

await builder.Build().RunAsync();
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>