在ASP.NET Web API中添加NewtonsoftJson后如何获取JSON响应?
解决ASP.NET Web API添加AddNewtonsoftJson后默认返回XML的问题
当在ASP.NET Web API中添加AddNewtonsoftJson()后默认返回XML,是因为XML格式器的优先级高于Newtonsoft JSON格式器导致的。以下是几种可行的解决方式:
方案一:调整格式器优先级,让JSON格式器优先
修改Controllers配置,将Newtonsoft JSON格式器移到输出格式器集合的首位,确保它被优先使用:
builder.Services.AddControllers(options => { options.ReturnHttpNotAcceptable = true; // 定位并调整Newtonsoft JSON格式器的优先级 var jsonFormatter = options.OutputFormatters.OfType<NewtonsoftJsonOutputFormatter>().FirstOrDefault(); if (jsonFormatter != null) { options.OutputFormatters.Remove(jsonFormatter); options.OutputFormatters.Insert(0, jsonFormatter); } }) .AddXmlDataContractSerializerFormatters() .AddNewtonsoftJson();
方案二:在AddNewtonsoftJson中配置默认媒体类型
通过AddNewtonsoftJson的配置项,明确指定JSON格式器的支持媒体类型,提升其优先级:
builder.Services.AddControllers(options => { options.ReturnHttpNotAcceptable = true; }) .AddXmlDataContractSerializerFormatters() .AddNewtonsoftJson(options => { // 可选:设置JSON格式美化 options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; // 确保JSON媒体类型被优先识别 foreach (var formatter in options.OutputFormatters.OfType<NewtonsoftJsonOutputFormatter>()) { formatter.SupportedMediaTypes.Add(Microsoft.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json")); } });
方案三:请求头指定Accept为application/json
在Postman的请求头中添加Accept: application/json,强制服务器返回JSON格式。此方式适合单请求场景,若需全局默认返回JSON,优先使用前两种方案。
内容的提问来源于stack exchange,提问作者HyperSquid
相关产品推荐
相关产品推荐

