asp.net-core – ASP.NET Core中的状态码406(不可接受)

REST服务应该提供内容协商.这意味着客户端发送包含响应所需内容类型的Accept标头.如果服务不支持媒体类型,则应使用状态代码406(不可接受)进行响应.

我尝试将此行为映射到ASP.NET Core.如果ASP.NET核心无法识别Accept标头中的媒体类型,则它将返回JSON文档.在框架的先前版本中,可以通过向配置添加特殊输出格式化程序来实现上述行为:

public void ConfigureServices(IServiceCollection services) {
  services.AddMvc(options => {
    options.OutputFormatters.Insert(0,new HttpNotAcceptableOutputFormatter());
  });
}

不幸的是,在RC1之后,HttpNotAcceptableOutputFormatter已从ASP.NET Core框架中删除.在当前版本的框架中是否有替代此类?

解决方法

在这种情况下,最好找到删除功能的提交,以查看它可能被替换的内容.在这种情况下,使用 this commit删除了HttpNotAcceptableOutputFormatter以修复 issue #4612

Alter content negotiation algorithm so that it can be configured (via Mvcoptions) to always respect an explicit Accept header.

它被替换为MvcOptions.ReturnHttpNotAcceptable,这是在使用AddMvc添加MVC时配置的Mvcoptions上的设置.

所以你的代码应该是这样的:

services.AddMvc(options =>
{
    options.ReturnHttpNotAcceptable = true;
});

相关文章

本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从...
基于 .NET 的一个全新的、好用的 PHP SDK + Runtime: Pe...
.NET 异步工作原理介绍。
引子 .NET 6 开始初步引入 PGO。PGO 即 Profile Guided Opti...
前言 2021/4/8 .NET 6 Preview 3 发布,这个版本的改进大多来...
前言 开头防杠:.NET 的基础库、语言、运行时团队从来都是相...