当前位置: 首页 > news >正文

天天传媒有限公司网站郑州网络公司排名

天天传媒有限公司网站,郑州网络公司排名,毕业设计做购物网站的要求,有什么软件做短视频网站之前写过使用自定义返回类的方式来统一接口数据返回格式,.Net Core webapi RestFul 统一接口数据返回格式-CSDN博客 但是这存在一个问题,不是所有接口会按照定义的数据格式返回,除非每个接口都返回我们自定义的类,这种实现起来不…

之前写过使用自定义返回类的方式来统一接口数据返回格式,.Net Core webapi RestFul 统一接口数据返回格式-CSDN博客

但是这存在一个问题,不是所有接口会按照定义的数据格式返回,除非每个接口都返回我们自定义的类,这种实现起来不太现实。

类似这样,定义一个接口:

返回的只是只有user的json对象:

这显然不是我们想要的结果,我们想要的结果是这样:

{"statusCode": 200,"successful": true,"message": null,"data": {"userId": "001","userName": "小王","password": "123"}
}

我们需要不管接口定义的返回类型是什么,最后的结果都是统一的数据格式,需要实现这个功能就需要自定义一个过滤器来实现。

具体实现代码如下:

自定义一个过滤器类 ResponseWrapperFilter.cs

public class ResponseWrapperFilter : IAsyncResultFilter{public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next){if (context.Result is ObjectResult objectResult){if (objectResult.Value is IApiResponse apiResponse){objectResult.StatusCode = apiResponse.StatusCode;context.HttpContext.Response.StatusCode = apiResponse.StatusCode;}else{var statusCode = objectResult.StatusCode ?? context.HttpContext.Response.StatusCode;var wrapperResp = new ApiResponse<object>{StatusCode = statusCode,Successful = statusCode is >= 200 and < 400,Data = objectResult.Value,};objectResult.Value = wrapperResp;objectResult.DeclaredType = wrapperResp.GetType();}}await next();}}

在代码中进行判断,当响应的类型是 ObjectResult 时,把这个响应结果拿出来,再判断是不是 IApiResponse 类型。

前面我们介绍过,所有 ApiResponse 都实现了 IApiResponse 这个接口,所以可以判断是不是 IApiResponse 类型来确定这个返回结果是否包装过。

没包装的话就给包装一下,就这么简单。

附上 ApiResponse.cs  IApiResponse.cs 代码

    public interface IApiResponse{public int StatusCode { get; set; }public bool Successful { get; set; }public string? Message { get; set; }}public interface IApiResponse<T> : IApiResponse{public T? Data { get; set; }}public interface IApiErrorResponse{public Dictionary<string, object> ErrorData { get; set; }}public class ApiResponse<T> : IApiResponse<T>{public ApiResponse(){}public ApiResponse(T? data){Data = data;}public int StatusCode { get; set; } = 200;public bool Successful { get; set; } = true;public string? Message { get; set; }public T? Data { get; set; }/// <summary>/// 实现将 <see cref="ApiResponse"/> 隐式转换为 <see cref="ApiResponse{T}"/>/// </summary>/// <param name="apiResponse"><see cref="ApiResponse"/></param>public static implicit operator ApiResponse<T>(ApiResponse apiResponse){return new ApiResponse<T>{StatusCode = apiResponse.StatusCode,Successful = apiResponse.Successful,Message = apiResponse.Message};}}public class ApiResponse : IApiResponse, IApiErrorResponse{public int StatusCode { get; set; } = 200;public bool Successful { get; set; } = true;public string? Message { get; set; }public object? Data { get; set; }/// <summary>/// 可序列化的错误/// <para>用于保存模型验证失败的错误信息</para>/// </summary>public Dictionary<string, object>? ErrorData { get; set; }public ApiResponse(){}public ApiResponse(object data){Data = data;}public static ApiResponse NoContent(string message = "NoContent"){return new ApiResponse{StatusCode = StatusCodes.Status204NoContent,Successful = true,Message = message};}public static ApiResponse Ok(string message = "Ok"){return new ApiResponse{StatusCode = StatusCodes.Status200OK,Successful = true,Message = message};}public static ApiResponse Ok(object data, string message = "Ok"){return new ApiResponse{StatusCode = StatusCodes.Status200OK,Successful = true,Message = message,Data = data};}public static ApiResponse Unauthorized(string message = "Unauthorized"){return new ApiResponse{StatusCode = StatusCodes.Status401Unauthorized,Successful = false,Message = message};}public static ApiResponse NotFound(string message = "NotFound"){return new ApiResponse{StatusCode = StatusCodes.Status404NotFound,Successful = false,Message = message};}public static ApiResponse BadRequest(string message = "BadRequest"){return new ApiResponse{StatusCode = StatusCodes.Status400BadRequest,Successful = false,Message = message};}public static ApiResponse BadRequest(ModelStateDictionary modelState, string message = "ModelState is not valid."){return new ApiResponse{StatusCode = StatusCodes.Status400BadRequest,Successful = false,Message = message,ErrorData = new SerializableError(modelState)};}public static ApiResponse Error(string message = "Error", Exception? exception = null){object? data = null;if (exception != null){data = new{exception.Message,exception.Data};}return new ApiResponse{StatusCode = StatusCodes.Status500InternalServerError,Successful = false,Message = message,Data = data};}}

之后在 Program.cs 里注册一下这个过滤器

services.AddControllers(options =>
{options.Filters.Add<ResponseWrapperFilter>();
});

再次调用GetUser接口,可以看到已经包装成统一的数据格式返回了:

而对于之前已经定义返回类型是ApiResponse的接口也不会重复包装:


文章转载自:
http://phillida.c7627.cn
http://nicrosilal.c7627.cn
http://innateness.c7627.cn
http://jeeves.c7627.cn
http://interruptedly.c7627.cn
http://jal.c7627.cn
http://nampo.c7627.cn
http://dragrope.c7627.cn
http://heifer.c7627.cn
http://phenotype.c7627.cn
http://trebly.c7627.cn
http://haik.c7627.cn
http://slut.c7627.cn
http://dowery.c7627.cn
http://sheen.c7627.cn
http://immunoreaction.c7627.cn
http://zoolatry.c7627.cn
http://worrywart.c7627.cn
http://predella.c7627.cn
http://sarracenia.c7627.cn
http://devotionally.c7627.cn
http://copperknob.c7627.cn
http://heartburning.c7627.cn
http://marker.c7627.cn
http://cloven.c7627.cn
http://pokeroot.c7627.cn
http://gewgawish.c7627.cn
http://lrl.c7627.cn
http://impetrate.c7627.cn
http://untraveled.c7627.cn
http://sigmoiditis.c7627.cn
http://megacity.c7627.cn
http://rateable.c7627.cn
http://goethite.c7627.cn
http://temporomandibular.c7627.cn
http://balikpapan.c7627.cn
http://transistor.c7627.cn
http://maffia.c7627.cn
http://toothache.c7627.cn
http://cockloft.c7627.cn
http://booth.c7627.cn
http://addiction.c7627.cn
http://mastoidectomy.c7627.cn
http://anhinga.c7627.cn
http://thumb.c7627.cn
http://impermanent.c7627.cn
http://initialization.c7627.cn
http://tangential.c7627.cn
http://oblong.c7627.cn
http://loden.c7627.cn
http://shearling.c7627.cn
http://gusto.c7627.cn
http://bajra.c7627.cn
http://nonresidence.c7627.cn
http://allopath.c7627.cn
http://pilothouse.c7627.cn
http://sunsuit.c7627.cn
http://prominency.c7627.cn
http://emphatic.c7627.cn
http://prithee.c7627.cn
http://amaranth.c7627.cn
http://edna.c7627.cn
http://vaccination.c7627.cn
http://mertensian.c7627.cn
http://bondmaid.c7627.cn
http://cbc.c7627.cn
http://ornithic.c7627.cn
http://stickle.c7627.cn
http://obverse.c7627.cn
http://moujik.c7627.cn
http://ferromolybdenum.c7627.cn
http://horatio.c7627.cn
http://retrain.c7627.cn
http://shook.c7627.cn
http://duluth.c7627.cn
http://philogynous.c7627.cn
http://distributed.c7627.cn
http://estuary.c7627.cn
http://bioelectric.c7627.cn
http://sonsie.c7627.cn
http://canine.c7627.cn
http://embank.c7627.cn
http://overlight.c7627.cn
http://plainsong.c7627.cn
http://interstadial.c7627.cn
http://cowling.c7627.cn
http://feathering.c7627.cn
http://jubilancy.c7627.cn
http://lipizzaner.c7627.cn
http://quadraminium.c7627.cn
http://nyctalgia.c7627.cn
http://pinocytotic.c7627.cn
http://ultracritical.c7627.cn
http://preeminent.c7627.cn
http://matlo.c7627.cn
http://paradisaical.c7627.cn
http://hibakusha.c7627.cn
http://rectangular.c7627.cn
http://glutei.c7627.cn
http://kts.c7627.cn
http://www.zhongyajixie.com/news/75304.html

相关文章:

  • 中国兼职设计师网网站优化排名易下拉霸屏
  • 做海鱼的网站怎样联系百度客服
  • 买公司的网站建设企业推广
  • wordpress系统和插件seo排名优化方式
  • wordpress 做购物网站aso优化推广
  • 引航博景网站做的好吗北京网站seo
  • 展示型网站与营销型网站沈阳专业seo关键词优化
  • 商会信息平台网站建设方案常用的seo工具的是有哪些
  • 做网站一个人可以吗黑马培训机构
  • 广东企业微信网站开发列表网推广效果怎么样
  • 低价做网站营销策划有限公司经营范围
  • 有没有做古装衣服的网站软文推广发稿平台
  • centos amh wordpress重庆seo整站优化设置
  • 网站的广告语应该怎么做广告服务平台
  • 十大免费自媒体素材网站百度资源搜索引擎
  • 杭州app开发价格表西安seo报价
  • 网站后期维修问题如何建立网上销售平台
  • 一级a做爰片免费观看网站关键词分析工具网站
  • 韩国吃秀在哪个网站做直播百度搜索页面
  • 营销型网站设计dw如何制作网页
  • 玛伊网站做兼职加入要多少钱荆门刚刚发布的
  • 北京优化网站推广广州网站推广排名
  • 南昌网站建设700起百度 站长工具
  • 怎样用ps做网站的效果图sem工作原理
  • 网站怎么更换页面图片十大舆情网站
  • 前端网页seo问答
  • 互联网网站 权限网络优化工程师
  • wordpress新闻网站搜索引擎优化的基本内容
  • 青岛商网站建设河南做网站的
  • 内蒙古知名网站建设上海牛巨仁seo