blazor - Blazor 的 WebApi 返回 text/html 而不是 application/json
问题描述
我的控制器在 Blazor 的服务器端 WebApi 中的方法返回 html/text 响应而不是导致
The provided ContentType is not supported; the supported types are 'application/json' and the structured syntax suffix 'application/+json'.
错误的 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");
感谢您的所有答案,并且一如既往地祝您编码愉快!
解决方案
当您使用托管选项创建 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 中所做的更改
推荐阅读
- rest - 我可以用其他可以创建 webhook 来捕获钩子的东西替换 zapier
- python - 如何使用 DataFrame 在 matplotlib 中创建图例?
- python - 如何将While循环中的数据附加到Empty DataFrame中
- gridview - 将动态/多个gridview导出到excel
- java - 将 JPEG 图像与 Javax ImageIO 进行比较
- android - 根据android应用程序中的配置使用资源
- bash - 在 shell 脚本中提取字符串的子部分
- javascript - 将 javascript 变量写入 .json 文件
- nginx-config - nginx:配置文件 /etc/nginx/nginx.conf 测试失败
- c# - 为什么实现接口的对象不能在服务注入时转换为类型?