Blazor Web Api 返回 text/html 而不是 application/json
Posted
技术标签:
【中文标题】Blazor Web Api 返回 text/html 而不是 application/json【英文标题】:Blazor's WebApi returns text/html instead of application/json 【发布时间】:2020-09-12 14:17:03 【问题描述】:我的控制器在 Blazor 的服务器端 WebApi 中的方法返回一个 html/text 响应而不是 application/json 这导致
The provided ContentType is not supported; the supported types are 'application/json' and the structured syntax suffix 'application/+json'.
错误。手动设置对 application/json 响应的内容类型的最佳方法是什么?
我的控制器带有 Get 方法
[Route("api/[controller]")]
[ApiController]
public class DeveloperController : ControllerBase
private readonly ApplicationDBContext _context;
public DeveloperController(ApplicationDBContext context)
_context = context;
[HttpGet]
public async Task<ActionResult> Get()
var devs = await _context.Developers.ToListAsync();
return Ok(devs);
以及来自客户端页面的调用
developers = await client.GetFromJsonAsync<Developer[]>("api/developer");
感谢您的所有回答,祝您编码愉快!
EDIT1:Chrome 开发者控制台屏幕
【问题讨论】:
首先检查api是否由于某种原因实际上返回了一个json而不是一个错误页面? @Umair 根据 chrome dev 控制台,我的 api 方法返回 Status Code:200 所以我在这里没有看到问题,但我真的不知道这是否是你所要求的。我对 WebApi 概念很陌生,所以我可能会迷路 您在交付 HTML 页面时获得 200。 @HenkHolterman 请检查我在问题中的编辑 现在从浏览器栏中的屏幕截图中删除该网址,看看会发生什么。你应该看到一些 json。 【参考方案1】:当您使用托管选项创建 Blazor Webassembly 应用程序时,您会创建一个 API 服务器来启动 SPA 应用程序。
当您从 SPA 调用 API 时,路由中的任何错误不会给出 404 错误,而是返回 Blazor 页面(带有“抱歉,这里没有”),代码 200。因为所有“剩余”的 url 都被路由到客户端。
该 HTML 页面在 GetFromJsonAsync() 中触发了 Json 反序列化器。导致错误信息:
不支持提供的 ContentType;支持的类型是 'application/json' 和结构化语法后缀 'application/+json'
因此,总而言之,您的 API 方法很好。它只是永远不会被调用。在 Get() 操作中放置一个断点,它不会被命中。您必须调试路由(服务器)和url(客户端)组合。
在这种情况下,错误不在发布的代码中,这应该有效。它必须是您在 index.cshtml 、 Server.Startup.cs 或 Client.Program.cs 中所做的更改
【讨论】:
特别感谢 @HenkHolterman 和 Umair 提供的所有帮助。事实证明,确实 Api 没有工作,我仍然不知道为什么 - 我将我的项目复制到一个新项目并且它工作(我终于在“api/controller”中有一个 JSON 结果)。下一个错误是没有从 Api 调用特定方法 - 我完全按照教程一步一步进行操作,但控制器中没有 [Route] 参数,因此出现错误。以上是关于Blazor Web Api 返回 text/html 而不是 application/json的主要内容,如果未能解决你的问题,请参考以下文章
.NET 6 Web API 和 Blazor 服务器应用程序之间的回调侦听器
使用 azure AD B2C 进行 blazor web api 身份验证
Azure 静态 Web 应用 Blazor WASM .Net Core API 和标识 - 无法从“_configuration”加载设置
Cors Policy 问题 Blazor WASM、Web API 和 Identity Server 4 和 IIS