WebApi接口返回通用类型封装(通过MVC的ActionFilterAttribute实现)

一、接口返回类型封装原因

1.所有接口返回的格式都是固定类型,有必要把共同的部分抽取出来,提高代码的阅读效率。

2.接口返回固定类型和业务逻辑拆分,减少代码量,提高代码的维护效率。

二、通过扩展MVC的ActionFilterAttribute方法来现实封装

1、扩展类实现

 /// 
    /// 接口通用返回数据类型
    /// 
    public class ResultModelAttribute : System.Web.Http.Filters.ActionFilterAttribute
    {

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            ApiResultModel result = new ApiResultModel();

            if (actionExecutedContext.Exception != null)  //异常判断
            {
                result.IsSuccess = false;
                result.ErrorMessage = actionExecutedContext.Exception.Message;
            }
            else
            {
                //请求是否成功
                result.IsSuccess = true;
                // 取得由 API 返回的资料
                result.Data = actionExecutedContext.ActionContext.Response.Content.ReadAsAsync().Result;

            }
            //结果转为自定义消息格式
            HttpResponseMessage httpResponseMessage = new HttpResponseMessage { Content = new StringContent(JsonConvert.SerializeObject(result), Encoding.GetEncoding("UTF-8"), "application/json") };

            // 重新封装回传格式
            actionExecutedContext.Response = httpResponseMessage;

            base.OnActionExecuted(actionExecutedContext);
        }

    } 
  

2、接口固定返回类定义

  /// 
    /// 返回类型
    /// 
    public class ApiResultModel
    {

        /// 
        /// 是否成功
        /// 
        public bool IsSuccess { get; set; }

        /// 
        /// 返回的数据
        /// 
        public object Data { get; set; }


        /// 
        /// 错误消息
        /// 
        public string ErrorMessage { get; set; }



    }

3、接口实现


      
        [ResultModel]
        public object Get(int id)
        {
            throw new Exception("出错了!");
            // return new Student() { Name = "姓名1", Money = 123 };
            return "123";
        }

4、接口实现注意事项

  • 只需要在方法上添加[ResultModel]即可。也可以给接口方法所在类添加该属性,扩展会应用该类下所有方法。
  • 接口返回类型都为Object
  • 业务逻辑处理时直接抛出异常,不需要再进行异常处理。
  • 业务处理后的数据集直接通过return 返回。

5、效果图

WebApi接口返回通用类型封装(通过MVC的ActionFilterAttribute实现)_第1张图片

你可能感兴趣的:(asp.net,MVC)