.net 6.0 webapi支持 xml返回xml json返回json

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) { }
}
相关推荐
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ32 分钟前
mapper.xml中limit分页参数不能使用计算表达式问题
xml
该用户已不存在1 小时前
.NET语言大舞台,有才你就来
c#·.net
mudtools2 小时前
不一样的.NET烟火,基于Roslyn的开源代码生成器
开源·.net
老坛程序员14 小时前
抓包解析MCP协议:基于JSON-RPC的MCP host与MCP server的交互
人工智能·网络协议·rpc·json·交互
余防15 小时前
XXE - 实体注入(xml外部实体注入)
xml·前端·安全·web安全·html
追逐时光者16 小时前
一款专门为 WPF 打造的开源 Office 风格用户界面控件库
后端·.net
玩泥巴的17 小时前
不一样的.NET烟火,基于Roslyn的开源代码生成器
c#·.net·代码生成·roslyn
mudtools18 小时前
.net操作Excel:图表 (Chart) 的创建与定制
c#·.net·excel·wps
ZoeLandia1 天前
Vue 项目 JSON 在线编辑、校验如何选?
前端·vue.js·json