Blazor WebAssembly:不支持提供的 ContentType;

Posted

技术标签:

【中文标题】Blazor WebAssembly:不支持提供的 ContentType;【英文标题】:Blazor WebAssembly: The provided ContentType is not supported; 【发布时间】:2020-09-16 19:08:06 【问题描述】:

我今天通过以下命令行安装了 Blazor WebAssembly 示例项目 (WeatherForecast):

dotnet new blazorwasm --hosted -o ProjectName

我在调试模式下通过 Visual Studio 2019 安装后直接启动了 SPA。浏览器是:Chrome。浏览器显示应用程序,但是当我选择导航菜单“获取数据”时,什么也没有发生。 Chrome 显示 1 个错误:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: The provided ContentType is not supported; the supported types are 'application/json' and the structured syntax suffix 'application/+json'.
System.NotSupportedException: The provided ContentType is not supported; the supported types are 'application/json' and the structured syntax suffix 'application/+json'.
  at System.Net.Http.Json.HttpContentJsonExtensions.ValidateContent (System.Net.Http.HttpContent content) <0x2e87f38 + 0x0009a> in <filename unknown>:0 
  at System.Net.Http.Json.HttpContentJsonExtensions.ReadFromJsonAsync[T] (System.Net.Http.HttpContent content, System.Text.Json.JsonSerializerOptions options, System.Threading.CancellationToken cancellationToken) <0x2e87d30 + 0x00006> in <filename unknown>:0 
  at System.Net.Http.Json.HttpClientJsonExtensions.GetFromJsonAsyncCore[T] (System.Threading.Tasks.Task`1[TResult] taskResponse, System.Text.Json.JsonSerializerOptions options, System.Threading.CancellationToken cancellationToken) <0x2e40838 + 0x0011c> in <filename unknown>:0 
  at BlazorIssue.Client.Pages.FetchData.OnInitializedAsync () [0x00033] in D:\Projects\BlazorIssue\Client\Pages\FetchData.razor:43 
  at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync () <0x2b8cb98 + 0x0013a> in <filename unknown>:0 
  at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask (System.Threading.Tasks.Task taskToHandle) <0x2dd8340 + 0x000b6> in <filename unknown>:0 

Chrome 显示以下请求标头:

上下文信息:

Chrome:V83.0.4103.61(64 位) Blazor:V3.2.0 Visual Studio:V16.6.0 DotNet V3.1.300 DotNet SDK:V3.1.300

这很奇怪,因为这个示例项目的全新安装昨天没有问题。

【问题讨论】:

你能告诉我们dotnet --versiondotnet --list-sdks 的输出吗?我们应该看到 3.1.300 吗?另外请确认各种 AspNetCore Blazor 参考的版本是什么,应该是Version="3.2.0" 我刚刚完成了同一个应用程序的设置。 WeatherForecast GET 应该是 content-type: application/json; charset=utf-8 而你的是 text/html - 我怀疑它可能会返回一个错误页面。尝试直接在浏览器中运行https://localhost:44325/WeatherForecast 【参考方案1】:

虽然这对于得到“200 Ok”响应的 OP 来说并非如此,但如果您的 API 方法返回 null(我的方法抛出 DB 异常并返回 null 作为后备)。

我有“204 No Content”作为响应和“提供的 ContentType 不受支持;支持的类型是 'application/json' 和结构化语法后缀 'application/+json'。 "作为客户端的错误。

我想 null 看起来不像 json :-)

【讨论】:

【参考方案2】:

如果客户端项目被指定为启动项目,这可能发生在 Web 程序集模板项目的 ASP.NET 托管版本中。确保将 Server 项目设置为 Startup 项目。

【讨论】:

我刚刚用我创建的模板进行了测试,这是正确的答案! 这完全让我发疯了 b/c 有时它会起作用。非常感谢! 也经常发生在我身上。解决方案有效,但是当您无法将其作为启动项目时如何调试客户端? 我也必须清除浏览器缓存/禁用缓存

以上是关于Blazor WebAssembly:不支持提供的 ContentType;的主要内容,如果未能解决你的问题,请参考以下文章

Blazor解决Blazor WebAssembly跨域访问后台服务问题

支持 docker 的 Blazor WebAssembly 应用程序 (linux)

解决Blazor WebAssembly跨域访问后台服务问题

Blazor WebAssembly 3.2 正式发布

Blazor WebAssembly的初次访问慢的优化

Blazor WebAssembly的初次访问慢的优化