如何解决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");
感谢所有答案,并一如既往地祝您编程愉快!
解决方法
使用“托管”选项创建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 举报,一经查实,本站将立刻删除。