忘忧的小站

  • 首页
  • 文章归档
  • 日志
  • 关于页面

  • 搜索
分布式索引 索引 全文搜索 Lucene.Net GPS 音视频 过滤 AOP 时区 升级 ABP.Zero 数据备份 linux 阿里云盘 aliyunpan 面试题 Signalr S 汉字 css html 前端 拼音键盘 在线键盘 uniapp .Net Core XMLRPC Serilog LOKI Nlog 分布式日志 加密 总结 人生 Asp.Net Core Swagger Web Element-plus Quasar 匹配 JavaScript 正则 .Net 后台 架构师 Redis EF CORE MySQL 自考 英语 集群 Jenkins CI/DI 内网穿透 代理 ABP 学习 后端 软考

Asp.Net Core 全局请求返回封装

发表于 2022-01-09 | 分类于 .Net Core | 0 | 阅读次数 1518

为什么要封装全局请求返回

  1. 专注于业务
  2. 更好的在Swagger上展示接口返回内容

开源项目地址

地址

代码

ApiResult.cs

using Lotus.Blog.TNT.Ext;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lotus.Blog.TNT.Web
{
    public class ApiResult
    {
        /// <summary>
        /// 是否为成功请求
        /// </summary>
        public bool Success
        { get; set; }

        /// <summary>
        /// 状态码
        /// </summary>
        public string Code
        { get; set; }

        /// <summary>
        /// 返回消息
        /// </summary>
        public string Message
        { get; set; }
        
        public DateTime DateTime { get; set; }
        
    }

    public class ApiResult<T> : ApiResult
    {
        public T Data { get; set; }
        
        public static ApiResult<T> SuccessInstance(T data)
        {
            return new ApiResult<T>() { Success = true, Code = "", Message = "", Data = data };

        }

        public static ApiResult<T> FailInstance(string message, string code = "500")
        {
            return new ApiResult<T>() { Success = false, Code = code, Message = message, Data = default(T) };

        }

        public static ApiResult<T> ParamsError(params string[] ps)
        {
            return new ApiResult<T>() { Success = false, Code = "param-error", Message = "参数错误:" + ps.Join(","), Data = default(T) };
        }

        public static ApiResult<T> DataNotExist()
        {
            return new ApiResult<T>() { Success = false, Code = "not-exist", Message = "数据不存在", Data = default(T) };
        }
    }

}

BaseActionFilter.cs

using System;
using Lotus.Blog.TNT.Ext;
using Lotus.Blog.TNT.Web;
using Microsoft.AspNetCore.Mvc;
namespace Lotus.Blog.TNT.Attributes
{
    public abstract class BaseActionFilter:System.Attribute
    {
        
        /// <summary>
        /// 返回JSON
        /// </summary>
        /// <param name="json">json字符串</param>
        /// <returns></returns>
        public ContentResult JsonContent(string json)
        {
            return new ContentResult { Content = json, StatusCode = 200, ContentType = "application/json; charset=utf-8" };
        }
        
        /// <summary>
        /// 返回成功
        /// </summary>
        /// <returns></returns>
        public ContentResult Success()
        {
            ApiResult res = new ApiResult
            {
                Success = true,
                Code = "",
                Message = "请求成功!",
                DateTime = DateTime.Now,
            };

            return JsonContent(res.ToJson());
        }
        
        /// <summary>
        /// 返回成功
        /// </summary>
        /// <param name="data">返回的数据</param>
        /// <returns></returns>
        public ContentResult Success<T>(T data)
        {
            ApiResult<T> res = new ApiResult<T>
            {
                Success = true,
                Message = "请求成功!",
                Code = "",
                DateTime = DateTime.Now,
                Data = data
            };

            return JsonContent(res.ToJson());
        }
        /// <summary>
        /// 返回错误
        /// </summary>
        /// <returns></returns>
        public ContentResult Error()
        {
            ApiResult res = new ApiResult
            {
                Success = false,
                Message = "错误请求!",
                Code = "error",
                DateTime = DateTime.Now,
            };

            return JsonContent(res.ToJson());
        }
        public ContentResult Error(string msg)
        {
            ApiResult res = new ApiResult
            {
                Success = false,
                Message = msg,
                Code = "error",
                DateTime = DateTime.Now,
            };


            return JsonContent(res.ToJson());
        }
        /// <summary>
        /// 返回错误
        /// </summary>
        /// <param name="msg">错误提示</param>
        /// <param name="errorCode">错误代码</param>
        /// <returns></returns>
        public ContentResult Error(string msg, string errorCode)
        {
            ApiResult res = new ApiResult
            {
                Success = false,
                Message = msg,
                Code = errorCode,
                DateTime = DateTime.Now,
            };

            return JsonContent(res.ToJson());
        }
        
    }
}

FormatResponseAttribute.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace Lotus.Blog.TNT.Attributes
{
    /// <summary>
    /// 全局返回封装
    /// </summary>
    public class FormatResponseAttribute : BaseActionFilter, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            if (context.Result is EmptyResult)
                context.Result = Success();
            else if (context.Result is ObjectResult res)
            {
                context.Result = Success(res.Value);
            }
        }
    }
}

如何使用
在Controller层Controller上增加属性
image.png
实现的效果
image.png
image.png
请求输出

{
"success":true,
"message":"",
"code":"",
"datetime":"2022-01-10 00:06:12",
"data":null
}

这样我们在编写接口的时候不用每次都return Success(data);了可以直接
return data;

  • 本文作者: 忘忧
  • 本文链接: /archives/74
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Core # Asp.Net
Asp.Net Core Swagger Api 分组和控制器注释
2021年程序人生
  • 文章目录
  • 站点概览
忘忧

忘忧

君子藏器于身,待时而动,何不利之有

44 日志
6 分类
60 标签
RSS
Github E-mail StackOverflow
Creative Commons
0%
© 2025 忘忧
由 Halo 强力驱动