首页 > 解决方案 > 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");

感谢您的所有答案,并且一如既往地祝您编码愉快!

EDIT1:一个 chrome 开发控制台屏幕 图片

标签: blazorwebapiblazor-webassemblyblazor-hosted

解决方案


当您使用托管选项创建 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 中所做的更改


推荐阅读