1. 首页>
  2. 技术文章>
  3. .net core mvc返回统一格式

.net core mvc返回统一格式

5/29/17 8:38:17 AM 浏览 964 评论 0

dotnetcore mvc

经常遇到需要后端工程师提供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类型。

网友讨论