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