Blazor Web Api 返回 text/html 而不是 application/json

标签 blazor webapi blazor-webassembly blazor-hosted

我的 Controller 在 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 方法的我的 Controller

 [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 应用程序时,您将创建一个也启动 SPA 应用程序的 API 服务器。
当您从 SPA 调用 API 时,路由中的任何错误都不会给出 404 错误,而是返回一个 Blazor 页面(带有“抱歉,这里什么都没有”),代码 200。因为所有“剩余”的 url 都被路由到客户端.
该 HTML 页面会触发 GetFromJsonAsync() 中的 Json 反序列化器。导致错误消息:

The provided ContentType is not supported; the supported types are 'application/json' and the structured syntax suffix 'application/+json'


因此,总而言之,您的 API 方法很好。它永远不会被调用。在 Get() 操作中放置一个断点,它不会被命中。您必须调试路由(服务器)和 url(客户端)组合。
在这种情况下,错误不在发布的代码中,应该有效。它必须是您在 index.cshtml 、 Server.Startup.cs 或 Client.Program.cs 中所做的更改

关于Blazor Web Api 返回 text/html 而不是 application/json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63861247/

相关文章:

blazor - 为什么 Blazor CSS 隔离不添加链接标签来加载捆绑的 css 文件?

asp.net-core - Blazor 独立 WebAssembly 代表登录用户调用安全核心 API

blazor - 在登录成功时使用 RemoteAuthenticatorView 提供第二个 Azure AD 登录对话框

asp.net - Blazor WebAssembly : The provided ContentType is not supported;

c# - Serilog 是否支持 .NET Framework 4.8

cookies - 如何在服务器端 Blazor 中访问 HttpContext?

jwt - 使用 OpenId (Cognito) 进行身份验证后,如何在 Blazor WebAssembly 中获取 id_token?

c# - 自定义类的 Blazor 验证

azure - 如何在 WebAPI 中实现 Azure 消息队列