我的 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 开发者控制台屏幕
最佳答案
当您使用托管选项创建 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/