经常遇到需要后端工程师提供API接口给微信端或者手机APP,这个时候返回统一的结果类型就显得很重要,我们先定义好返回的结果类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using MyCode.Business.Enum;
namespace MyCode.Business.Message
{
public class Result
{
public Object Data { get; set; }
public ResultCode ResultCode { get; set; }
public string ErrorMessage { get; set; }
}
}如果接口需要返回数据,我们统一放在Data里面,不管返回的是List还是int,而如果出错,我们将出错信息放在ErrorMessage,ResultCode是个枚举类型,定义如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyCode.Business.Enum
{
/// <summary>
/// 返回结果的枚举
/// </summary>
public enum ResultCode
{
/// <summary>
/// 成功
/// </summary>
Success = 1,
/// <summary>
/// 发生错误
/// </summary>
Error = -1
}
}在站点中添加类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Filters;
using MyCode.Business.Message;
using MyCode.Business.Enum;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
namespace MyCode.WebAdmin.Filter
{
public class ResultHandleAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext actionExecutedContext) {
base.OnActionExecuted(actionExecutedContext);
if (actionExecutedContext.Result is ObjectResult || actionExecutedContext.Result is EmptyResult)
{
if (actionExecutedContext.Exception == null)
{
Result result = new Result();
result.ResultCode = ResultCode.Success;
if (actionExecutedContext.Result is ObjectResult)
{
result.Data = (actionExecutedContext.Result as ObjectResult).Value;
}
Newtonsoft.Json.JsonSerializerSettings JsonSetting = new Newtonsoft.Json.JsonSerializerSettings();
JsonSetting.Formatting = Newtonsoft.Json.Formatting.None;
actionExecutedContext.Result = new JsonResult(result, JsonSetting);
}
}
}
}
}然后再在Startup.cs中的ConfigureServices(IServiceCollection services)方法体内,增加:
services.AddMvc(options =>
{
options.Filters.Add(new MyCode.WebAdmin.Filter.ResultHandleAttribute());
}
);而在control层,根据返回方法直接返回实际的类型就可以了,程序会统一再处理一遍,返回统一的Result类型。