csharp
// 添加控制器并配置格式化器
var builder = WebApplication.CreateBuilder();
builder.Services.AddControllers(options =>
{
options.Filters.Add<ContentTypeFilter>();
options.ReturnHttpNotAcceptable = true; // 强制要求Accept头匹配
// 添加 XML 格式化器
options.InputFormatters.Add(new XmlSerializerInputFormatter(options));
options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
})
.AddXmlSerializerFormatters()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
});
添加筛选器
csharp
public class ContentTypeFilter: IResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
if (context.Result is ObjectResult objectResult)
{
var requestContentType = context.HttpContext.Request.ContentType;
if (requestContentType?.Contains("application/xml") == true)
{
objectResult.ContentTypes.Clear();
objectResult.ContentTypes.Add("application/xml");
}
else // 默认或JSON
{
objectResult.ContentTypes.Clear();
objectResult.ContentTypes.Add("application/json");
}
}
}
public void OnResultExecuted(ResultExecutedContext context) { }
}