fajiao
3 years ago
10 changed files with 175 additions and 7 deletions
@ -0,0 +1,35 @@ |
|||
namespace EC.App.Entity |
|||
{ |
|||
public class RespParam<T> |
|||
{ |
|||
/// <summary>
|
|||
/// 返回码
|
|||
/// </summary>
|
|||
public int Code { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 是否成功
|
|||
/// </summary>
|
|||
public bool IsSuccess { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 返回数据
|
|||
/// </summary>
|
|||
public T Data { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 错误信息
|
|||
/// </summary>
|
|||
public object Errors { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 附加数据
|
|||
/// </summary>
|
|||
public object Extras { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 时间戳
|
|||
/// </summary>
|
|||
public long Timestamp { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,83 @@ |
|||
using EC.App.Entity; |
|||
using EC.App.Factory; |
|||
using Furion.DataValidation; |
|||
using Furion.DependencyInjection; |
|||
using Furion.UnifyResult; |
|||
using Furion.UnifyResult.Internal; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace EC.App.Extensions |
|||
{ |
|||
/// <summary>
|
|||
/// 返回值
|
|||
/// </summary>
|
|||
[SuppressSniffer, UnifyModel(typeof(RespParam<>))] |
|||
public class RespParamProvider : IUnifyResultProvider |
|||
{ |
|||
/// <summary>
|
|||
/// 成功返回值
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
/// <param name="data"></param>
|
|||
/// <returns></returns>
|
|||
public IActionResult OnSucceeded(ActionExecutedContext context, object data) |
|||
{ |
|||
return RespParamFactory.New(StatusCodes.Status200OK, true, data).ToJsonResult(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 验证失败返回值
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
/// <param name="metadata"></param>
|
|||
/// <returns></returns>
|
|||
public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata) |
|||
{ |
|||
return RespParamFactory.New(StatusCodes.Status400BadRequest, errors: metadata.ValidationResult).ToJsonResult(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 异常返回值
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
/// <param name="metadata"></param>
|
|||
/// <returns></returns>
|
|||
public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) |
|||
{ |
|||
return RespParamFactory.New(metadata.StatusCode, errors: metadata.Errors).ToJsonResult(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 特定状态码返回值
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
/// <param name="code"></param>
|
|||
/// <param name="unifyResultSettings"></param>
|
|||
/// <returns></returns>
|
|||
public async Task OnResponseStatusCodes(HttpContext context, int code, UnifyResultSettingsOptions unifyResultSettings = null) |
|||
{ |
|||
// 设置响应状态码
|
|||
UnifyContext.SetResponseStatusCodes(context, code, unifyResultSettings); |
|||
|
|||
switch (code) |
|||
{ |
|||
// 处理 401 状态码
|
|||
case StatusCodes.Status401Unauthorized: |
|||
await context.Response.WriteAsJsonAsync(RespParamFactory.New(code, errors: "401 Unauthorized") |
|||
, Furion.App.GetOptions<JsonOptions>()?.JsonSerializerOptions); |
|||
break; |
|||
// 处理 403 状态码
|
|||
case StatusCodes.Status403Forbidden: |
|||
await context.Response.WriteAsJsonAsync(RespParamFactory.New(code, errors: "403 Forbidden") |
|||
, Furion.App.GetOptions<JsonOptions>()?.JsonSerializerOptions); |
|||
break; |
|||
|
|||
default: break; |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,41 @@ |
|||
using EC.App.Entity; |
|||
using Furion.UnifyResult; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using System; |
|||
|
|||
namespace EC.App.Factory |
|||
{ |
|||
public static class RespParamFactory |
|||
{ |
|||
public static RespParam<object> New(int code, bool isSuccess = default, object data = default, object errors = default) |
|||
{ |
|||
return new RespParam<object> |
|||
{ |
|||
Code = code, |
|||
IsSuccess = isSuccess, |
|||
Data = data, |
|||
Errors = errors, |
|||
Extras = UnifyContext.Take(), |
|||
Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() |
|||
}; |
|||
} |
|||
|
|||
public static RespParam<object> New(Enum code, bool isSuccess = default, object data = default, object errors = default) |
|||
{ |
|||
return new RespParam<object> |
|||
{ |
|||
Code = code.GetHashCode(), |
|||
IsSuccess = isSuccess, |
|||
Data = data, |
|||
Errors = errors, |
|||
Extras = UnifyContext.Take(), |
|||
Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() |
|||
}; |
|||
} |
|||
|
|||
public static JsonResult ToJsonResult(this RespParam<object> respParam) |
|||
{ |
|||
return new JsonResult(respParam); |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue