// Admin.NET 项目的版æƒã€å•†æ ‡ã€ä¸“利和其他相关æƒåˆ©å‡å—ç›¸åº”æ³•å¾‹æ³•è§„çš„ä¿æŠ¤ã€‚ä½¿ç”¨æœ¬é¡¹ç›®åº”éµå®ˆç›¸å…³æ³•律法规和许å¯è¯çš„è¦æ±‚。 // // 本项目主è¦éµå¾ª MIT 许å¯è¯å’Œ Apache 许å¯è¯ï¼ˆç‰ˆæœ¬ 2.0)进行分å‘和使用。许å¯è¯ä½äºŽæºä»£ç æ ‘æ ¹ç›®å½•ä¸çš„ LICENSE-MIT å’Œ LICENSE-APACHE 文件。 // // ä¸å¾—利用本项目从事å±å®³å›½å®¶å®‰å…¨ã€æ‰°ä¹±ç¤¾ä¼šç§©åºã€ä¾µçŠ¯ä»–äººåˆæ³•æƒç›Šç‰æ³•å¾‹æ³•è§„ç¦æ¢çš„æ´»åЍï¼ä»»ä½•基于本项目二次开å‘è€Œäº§ç”Ÿçš„ä¸€åˆ‡æ³•å¾‹çº çº·å’Œè´£ä»»ï¼Œæˆ‘ä»¬ä¸æ‰¿æ‹…ä»»ä½•è´£ä»»ï¼ namespace Admin.NET.Plugin.GoView; /// <summary> /// GoView 规范化结果 /// </summary> [UnifyModel(typeof(GoViewResult<>))] public class GoViewResultProvider : IUnifyResultProvider { /// <summary> /// JWT 授æƒå¼‚常返回值 /// </summary> /// <param name="context"></param> /// <param name="metadata"></param> /// <returns></returns> public IActionResult OnAuthorizeException(DefaultHttpContext context, ExceptionMetadata metadata) { return new JsonResult(RESTfulResult(metadata.StatusCode, data: metadata.Data, errors: metadata.Errors)); } /// <summary> /// 异常返回值 /// </summary> /// <param name="context"></param> /// <param name="metadata"></param> /// <returns></returns> public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) { return new JsonResult(RESTfulResult(metadata.StatusCode, data: metadata.Data, errors: metadata.Errors)); } /// <summary> /// æˆåŠŸè¿”å›žå€¼ /// </summary> /// <param name="context"></param> /// <param name="data"></param> /// <returns></returns> public IActionResult OnSucceeded(ActionExecutedContext context, object data) { return new JsonResult(RESTfulResult(StatusCodes.Status200OK, true, data)); } /// <summary> /// 验è¯å¤±è´¥è¿”回值 /// </summary> /// <param name="context"></param> /// <param name="metadata"></param> /// <returns></returns> public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata) { return new JsonResult(RESTfulResult(metadata.StatusCode ?? StatusCodes.Status400BadRequest, data: metadata.Data, errors: metadata.ValidationResult)); } /// <summary> /// 特定状æ€ç 返回值 /// </summary> /// <param name="context"></param> /// <param name="statusCode"></param> /// <param name="unifyResultSettings"></param> /// <returns></returns> public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings) { // 设置å“应状æ€ç UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings); switch (statusCode) { // å¤„ç† 401 状æ€ç case StatusCodes.Status401Unauthorized: await context.Response.WriteAsJsonAsync(RESTfulResult(886, errors: "401 ç™»å½•å·²è¿‡æœŸï¼Œè¯·é‡æ–°ç™»å½•"), App.GetOptions<JsonOptions>()?.JsonSerializerOptions); break; // å¤„ç† 403 状æ€ç case StatusCodes.Status403Forbidden: await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "403 ç¦æ¢è®¿é—®ï¼Œæ²¡æœ‰æƒé™"), App.GetOptions<JsonOptions>()?.JsonSerializerOptions); break; default: break; } } /// <summary> /// 返回 RESTful é£Žæ ¼ç»“æžœé›† /// </summary> /// <param name="statusCode"></param> /// <param name="succeeded"></param> /// <param name="data"></param> /// <param name="errors"></param> /// <returns></returns> private static GoViewResult<object> RESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default) { return new GoViewResult<object> { Code = statusCode, Msg = errors is null or string ? (errors + "") : JSON.Serialize(errors), Data = data, Count = data != null && data.GetType().IsGenericType && data.GetType().GetGenericTypeDefinition() == typeof(List<>) ? ((IList)data).Count : null }; } } /// <summary> /// GoView 返回结果 /// </summary> /// <typeparam name="T"></typeparam> public class GoViewResult<T> { /// <summary> /// 状æ€ç /// </summary> public int Code { get; set; } /// <summary> /// ä¿¡æ¯ /// </summary> public string Msg { get; set; } /// <summary> /// æ•°æ® /// </summary> public T Data { get; set; } /// <summary> /// 总数 /// </summary> public int? Count { get; set; } }