分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

使Asp.net Core同时支持输出Json/Xml

发布时间:2023-09-06 01:49责任编辑:苏小强关键词:暂无标签

我们知道Asp.net Core是支持输出为Json格式的。同时也支持输出为xml格式。只要我们正确的配置。并在Request时指定正确的Accept,即可根据不同的Header来输出不同的格式.

前几天看Jessite4.0读其日志,又看到这段文字

所有连接加 .json 或 .xml 或增加 __ajax=json 参数,或增加 __ajax=xml 参数,则自动返回 json 或 xml 数据,而不返回视图

于是在想,我们能不能提供下Asp.net Core中这种功能。最笨的办法,当然是在每个API返回时,判断下有没有这个参数。话说回来,既然是每个请教都需要判断,那么,最简单的办法是不是使用Middleware

实现原理就是,对请求中是否有类似于_ajax参数进行判断,有之后,根据参数值选用不同的Accept.

实现

 ????public class SerializationMiddleware ???{ ????????private readonly RequestDelegate _next; ????????private readonly SerializationOption _option; ?????????public SerializationMiddleware(RequestDelegate next,SerializationOption option) ???????{ ???????????_next = next; ???????????_option = option; ????????} ????????public async Task InvokeAsync(HttpContext context) ???????{ ???????????var servalue = context.Request.Query[_option.QueryName]; ????????????if (_option.SerializeJson && !string.IsNullOrEmpty(servalue)) ???????????{ ???????????????if (servalue == "json") ???????????????{ ???????????????????context.Request.ContentType = "application/json"; ???????????????????context.Request.Headers["Accept"]= "application/json"; ???????????????} ???????????????if (servalue == "xml") ???????????????{ ????????????????????context.Request.ContentType = "text/xml, application/xml"; ???????????????????context.Request.Headers["Accept"] = " application/xml,text/xml"; ????????????????} ???????????} ??????????????await _next.Invoke(context); ???????} ???} ?/// <summary>/// 序列化选项/// 是否序化Json/Xml/// </summary>public class SerializationOption{ ???public string QueryName { get; set; } = "queryType"; ???public bool SerializeJson { get; set; } = false; ???public bool SerializeXml { get; set; } = false;} ?

当我们完成SerializationMiddleware,我们可以将调用包装下

 ????????public static IMvcBuilder AddSerialization(this IMvcBuilder builder) ???????{ ????????????return builder.AddXmlSerializerFormatters(); ????????} ?????????public static IApplicationBuilder UseSerialization(this IApplicationBuilder builder,SerializationOption option) ???????{ ????????????return builder.UseMiddleware<SerializationMiddleware>(option); ????????}

我们在Startup.cs中使用

 //先是在ConfigureServices(IServiceCollection services)services.AddMvc(options => ???????????{ ???????????????//options.RespectBrowserAcceptHeader = true; // false by default ???????????????options.OutputFormatters.Add(new XmlSerializerOutputFormatter()); ???????????}) ???????????.AddSerialization(); //在Configure(IApplicationBuilder app, IHostingEnvironment env) app.UseSerialization(new SerializationOption { SerializeJson = true, SerializeXml = true });

后续

我们当然可以将SerializationOption做成IOtion<>形式的,可以在其它地方查看其值。只是感觉上并没有多大的意义

使Asp.net Core同时支持输出Json/Xml

原文地址:https://www.cnblogs.com/startewho/p/8856497.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved