C# ASP.NET核心中的状态代码406(不可接受)

C# ASP.NET核心中的状态代码406(不可接受),c#,asp.net-core,C#,Asp.net Core,REST服务应提供内容协商。这意味着客户端发送一个包含响应所需内容类型的Accept标头。如果服务不支持此媒体类型,则应以状态代码406(不可接受)进行响应 我尝试将此行为映射到ASP.NET核心。如果ASP.NET core无法识别Accept标头中的媒体类型,则返回JSON文档。在以前版本的框架中,可以通过向配置中添加特殊的输出格式化程序来实现上述行为: public void ConfigureServices(IServiceCollection services) { servic

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

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

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

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

您可以将其添加到
启动
类中的
配置服务
方法中

services.AddMvc(options =>
{
    options.ReturnHttpNotAcceptable = true;
    // If you need to add support for XML
    // options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
});

在这种情况下,最好找到删除该功能的提交,看看它可能被替换成什么。在这种情况下,
HttpNotAcceptableOutputFormatter
已被删除,以修复:

更改内容协商算法,以便(通过mvcopions)将其配置为始终遵守显式接受头

替换为的是,这是在添加MVC时配置的
mvcopions
上的一个设置

因此,您的代码应该如下所示:

services.AddMvc(options =>
{
    options.ReturnHttpNotAcceptable = true;
});
我以前有过这样的经历:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}
然后我将它改为
AddMvcCore()
,而不是
AddMvc()

最后,我在响应406中遇到了这个问题,所以我所做的是将
.AddJsonFormatters()
添加到
服务中。AddMVCCore()
并且我的API再次工作

public void ConfigureServices(IServiceCollection services)
{
   services.AddMvcCore()
        .AddJsonFormatters();
}

上面的答案对我来说都不管用,最后这个终于管用了

在Startup.cs的ConfigureServices中添加以下行

 public void ConfigureServices(IServiceCollection services)
 {
        services.AddMvcCore().AddJsonFormatters().AddApiExplorer();
 }

你到底是怎么发现的@Mardoxx查看RC2分支并使用文件搜索(键盘快捷键:T)。这告诉了我文件最初的位置。然后我转到,并使用GitHub UI进行“二进制搜索”,以查找删除该文件的提交。
 public void ConfigureServices(IServiceCollection services)
 {
        services.AddMvcCore().AddJsonFormatters().AddApiExplorer();
 }