sunpengfei
1 天以前 67d5dbb966df4af4304b4168378c68ce83ad01b1
FlexJobApi.Core/Utils/FriendlyResultUtils/FriendlyResultProvider.cs
@@ -5,6 +5,7 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.CodeAnalysis;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -31,6 +32,7 @@
                GetResult(
                    metadata.StatusCode,
                    data: metadata.Data,
                    errorCode: metadata.ErrorCode.ToString(),
                    errors: metadata.Errors),
                UnifyContext.GetSerializerSettings(context));
        }
@@ -47,6 +49,7 @@
                GetResult(
                    metadata.StatusCode,
                    data: metadata.Data,
                    errorCode: metadata.ErrorCode?.ToString() ?? "s500",
                    errors: metadata.Errors)
                , UnifyContext.GetSerializerSettings(context));
        }
@@ -75,11 +78,18 @@
        /// <returns></returns>
        public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)
        {
            UnifyContext.Fill(metadata.ValidationResult);
            var errors = "参数错误";
            if (metadata.ValidationResult is Dictionary<string, string[]> result && result != null && result.Count > 0)
            {
                errors = result.SelectMany(it => it.Value).FirstOrDefault() ?? "参数错误";
            }
            return new JsonResult(
                GetResult(
                    metadata.StatusCode ?? StatusCodes.Status400BadRequest,
                    data: metadata.Data,
                    errors: metadata.ValidationResult),
                    errorCode: "s400",
                    errors: errors),
                UnifyContext.GetSerializerSettings(context));
        }
@@ -104,16 +114,18 @@
                case StatusCodes.Status401Unauthorized:
                    await context.Response.WriteAsJsonAsync(
                        GetResult(
                            statusCode,
                            errors: "401 Unauthorized"),
                            statusCode,
                            errorCode: "401",
                            errors: "401 Unauthorized"),
                        App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
                    break;
                // 处理 403 状态码
                case StatusCodes.Status403Forbidden:
                    await context.Response.WriteAsJsonAsync(
                        GetResult(
                            statusCode,
                            errors: "403 Forbidden"),
                            statusCode,
                            errorCode: "403",
                            errors: "403 Forbidden"),
                        App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
                    break;
                default: break;
@@ -126,17 +138,19 @@
        /// <param name="statusCode"></param>
        /// <param name="succeeded"></param>
        /// <param name="data"></param>
        /// <param name="errorCode"></param>
        /// <param name="errors"></param>
        /// <returns></returns>
        private static FriendlyResult<object> GetResult(int statusCode, bool succeeded = default, object data = default, object errors = default)
        private static FriendlyResult<object> GetResult(int statusCode, bool succeeded = default, object data = default, string errorCode = null, object errors = default)
        {
            return new FriendlyResult<object>
            {
                TraceId = App.GetTraceId(),
                Code = statusCode,
                ErrorCode = errorCode,
                Success = succeeded,
                Data = data,
                Errors = errors,
                Msg = errors,
                Extras = UnifyContext.Take(),
                Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
            };