使Asp.net Core同时支持输出Json/Xml
我们知道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的更多相关文章
- asp.net core 实现支持自定义 Content-Type
asp.net core 实现支持自定义 Content-Type Intro 我们最近有一个原本是内网的服务要上公网,在公网上有一层 Cloudflare 作为网站的公网流量提供者,CloudFla ...
- asp.net core 3.0 MVC JSON 全局配置
asp.net core 3.0 MVC JSON 全局配置 System.Text.Json(default) startup配置代码如下: using System.Text.Encodings. ...
- asp.net core 实现支持多语言
asp.net core 实现支持多语言 Intro 最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语言方面的一 ...
- Asp.Net Core 已支持 gRPC-Web !!
grpc-dotnet 项目在 PR #695 完成了 ASP.NET Core 服务与 .NET Core gRPC 客户端的 gRPC-Web 实现. 虽然目前还是实验性项目,但是并不阻碍我们为之 ...
- 解决asp.net core 日期格式 datetime Json返回 带T的问题
原文:解决asp.net core 日期格式 datetime Json返回 带T的问题 记录一下: Startup中,将 services.AddMvc(); 改为: services.AddMvc ...
- 使用jackson美化输出json/xml
转载:http://www.cnblogs.com/xiwang/ 如何使用jackson美化输出json/xml 1.美化POJO序列化xml 下面将POJO列化为xml并打印. Person pe ...
- 如何使用jackson美化输出json/xml
如何使用jackson美化输出json/xml 1.美化POJO序列化xml 下面将POJO列化为xml并打印. Person person = new Person(); //设置person属性 ...
- Asp.net Core WebApi 支持json/xml格式的数据返回
Asp.net core 在做webapi项目的时候,默认是只返回json格式的数据的,如果想要开启xml数据返回,需要在startup里配置如下: public void ConfigureServ ...
- 快速搭建CentOS+ASP.NET Core环境支持WebSocket
环境:CentOS 7.x,.net core 2 以下.net core 2安装操作为官方方法.如果你使用Docker,那么更简单了,只需要docker pull microsoft/dotnet就 ...
随机推荐
- [poj3984]迷宫问题_bfs
迷宫问题 题目大意:给你一个5*5的矩阵,求左上角到左下角的最短路径. 注释:0或1的矩阵,1表示不能走,0表示能走,保证有唯一最短路径. 想法:bfs爆搜练习题.通过其实点,定义方向数组,然后进行b ...
- JVM GC算法
在判断哪些内存需要回收和什么时候回收用到GC 算法,本文主要对GC 算法进行讲解. JVM垃圾判定算法 常见的JVM垃圾判定算法包括:引用技术算法.可达性分析算法. 引用技术算法(Reference ...
- u3d材质Tiling和Offset意义以及TRANSFORM_TEX
1. TRANSFORM_TEX主要作用是拿顶点的uv去和材质球的tiling和offset作运算, 确保材质球里的缩放和偏移设置是正确的 下面这两个函数是等价的.o.uv = TRANSFORM ...
- php 常用数据大全
一.数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值 array_keys($arr);获得数组的键名 array_flip($arr);数组中的值与键名互换(如 ...
- SQL函数返回表的示例-Z
create function [dbo].[GetOperateCustGroup] ( ), ) ) returns @TempTable table (MaxPrice float,MinPri ...
- Alpha冲刺Day2
Alpha冲刺Day2 一:站立式会议 今日安排: 首先完善前一天的剩余安排工作量,其次我们把项目大体分为四个模块:数据管理员.企业人员.第三方机构.政府人员.数据管理员这一模块,数据管理员又可细分为 ...
- 201621123031 《Java程序设计》第12周学习总结
作业12-流与文件 1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 在Java中的java.io包中定义了许多类专门负责处理各种方式的输入与输出.其中,所有输入 ...
- IQKeyboardManager使用方法
使用方法: 将IQKeyboardManager 和 IQSegmentedNextPrevious类文件加进项目中.在AppDelegate文件中写下以下一行代码: [IQKeyBoardManag ...
- Python爬虫之urllib模块2
Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...
- Mybatis的原始dao开发方法
在进入主题之前先提一下sqlSession.sqlSession是一个面向用户(程序员)的接口. sqlSession中提供了很多操作数据库的方法,如: selectOne(返回单个对象).selec ...