微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

中所做的更改

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。