Blazor的WebApi返回text / html而不是application / json

问题描述

我在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开发者控制台屏幕

pic

解决方法

使用“托管”选项创建Blazor Webassembly应用程序时,会创建一个API服务器,该服务器还会启动SPA应用程序。

当您从SPA调用API时,路由中的任何错误不会给出404错误,而是返回Blazor页面(“抱歉,这里什么都没有”),代码200。所有“剩余”网址都路由到客户端。

该HTML页面触发了GetFromJsonAsync()中的Json解串器。导致错误消息:

不支持提供的ContentType;支持的类型为“ application / json”,结构化后缀为“ application / + json”

因此,总而言之,您的API方法很好。只是从来没有被调用。在Get()操作中放置一个断点,它将不会被击中。您必须调试路由(服务器)和url(客户端)组合。

在这种情况下,该错误不在发布的代码中,应该可以使用。这必须是您在index.cshtml,Server.Startup.cs或Client.Program.cs

中所做的更改