public class ResultModelBase { public int? Code { get; set; } }
DataResultModel 类用属性 Data 来包装返回结果
1 2 3 4 5 6 7 8 9 10
public class DataResultModel:ResultModelBase { public DataResultModel(object data,int? code = 200) { Code = code; Data = data; } public object Data { get; set; } }
MessageResultModel 类使用属性 Message 类返回消息文本
1 2 3 4 5 6 7 8 9 10
public class MessageResultModel:ResultModelBase { public MessageResultModel(string massage,int? code = 200) { Code = code; Message = massage; }
public class CustomerExceptionAttribute: IExceptionFilter { public void OnException(ExceptionContext context) { HttpStatusCode status = HttpStatusCode.InternalServerError;
int code = (int) status; //处理各种异常 if (context.Exception is UserNotFoundException) { code = 500001; } context.Result = new CustomExceptionResult(context.Exception,status ,code); context.ExceptionHandled = true; } }
public class ResultFilterAttribute:ActionFilterAttribute { public override void OnResultExecuting(ResultExecutingContext context) { var objectResult = context.Result as ObjectResult; if (objectResult?.Value == null) { context.Result=new NotFoundObjectResult(new MessageResult("未找到资源")); } if (context.Result is MessageResult) { context.Result = new MessageResult(objectResult.Value.ToString()); } else if (context.Result is OkObjectResult || context.Result is ObjectResult) { context.Result = new DataResult(objectResult.Value); } } }
用户添加接口
在 UserRepository 中添加 AddUser 方法
1 2 3 4 5 6 7 8
public User AddUser(User user) { int id=_users.OrderByDescending(x => x.Id).First().Id + 1; user.Id = id; _users.Add(user);
public User AddUser(User user) { int id = 1; if (_users.Any()) { id=_users.OrderByDescending(x => x.Id).First().Id + 1; } user.Id = id; _users.Add(user);
return user; }
在 Controller 层的 AddUser 方法也需要对入参实体进行检查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[HttpPost] public User AddUser(User user) { return _userService.AddUser(user); }
public class User { public int Id { get; set; }
[Required(ErrorMessage = "用户名不能为空")]
public string Name { get; set; } [Required(ErrorMessage = "用户编码不能为空")] public string Code { get; set; } }
实际情况下接口层的入参实体和底层的数据实体需要分开,然后使用 AutoMapper 之类的映射工具进行转换,本示例中使用了同一个 User 。