.NET Core API之格式化输出对象OutputFormatter

2022-04-25 09:46:20

相信大家在项目中都用过统一响应参数模板。

先声明一个响应模板类:

public class ResponseDto{    public int code { get; set; }    public stringFormatters.Add(new XmlDataContractSerializerOutputFormatter());// 我们自定义的输出格式c.OutputFormatters.Add(new ObjectOutputFormatter());});}

搞定,我们来看看效果:

.NET Core API之格式化输出对象OutputFormatter

ActionFilterAttribute

有些同学可能会想到过滤器,是的,上面的效果过滤器也能实现:

public class ResultFilter : ActionFilterAttribute{    public override void OnResultExecuting(ResultExecutingContext context)    {        ResponseDto result = new ResponseDto();        result.code = 200;        result.msg = "成功,ResultFilter";        var properties = context.Result.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);        result.data = properties.FirstOrDefault(c => c.Name == "Value").GetValue(context.Result);        context.Result = new JsonResult(result);        base.OnResultExecuting(context);    }}[TypeFilter(typeof(ResultFilter))][HttpGet]public WeatherForecast Get(){return new WeatherForecast() { Date = DateTime.Now };}

.NET Core API之格式化输出对象OutputFormatter

猴:有了过滤器为什么还搞个OutputFormatter呢?

我:不能因为过滤器可以实现同样的功能就认为OutputFormatter多余了,很显然过滤器的操作对象是请求/响应上下文,而OutputFormatter的操作对象则是响应参数。再说了,ActionFilterAttribute过滤器只是众多过滤器的一种。

猴:那过滤器和自定义OutputFormatter一起用会是什么效果呢?是不是像下面这样?

.NET Core API之格式化输出对象OutputFormatter

我:不是,过滤器和自定义OutputFormatter同时使用,生效的只有过滤器,不信可以打断点试一下哦。

[Produces("text/object")][TypeFilter(typeof(ResultFilter))][HttpGet]public WeatherForecast Get(){return new WeatherForecast() { Date = DateTime.Now };}

.NET Core API之格式化输出对象OutputFormatter

到此这篇关于.NET Core API之格式化输出对象OutputFormatter的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。