src/Library/NetPro.Swagger/SwaggerDefaultValueFilter.cs

(开头部分) 5KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json.Converters;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.ComponentModel;
using System.Linq;
using System.Reflection;

namespace NetPro.Swagger
{
    /// <summary>
    /// swagger默认值,只对swagger生效,避免直接使用[DefaultValue]影响正常业务
    /// </summary>
    public class SwaggerDefaultValueFilter : IOperationFilter
    {
        private readonly dynamic _mvcJsonOptions;

        public SwaggerDefaultValueFilter(IOptions<dynamic> mvcJsonOptions)
        {
            _mvcJsonOptions = mvcJsonOptions.Value;
        }

        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null || !operation.Parameters.Any())
            {
                return;
            }

            var parameterValuePairs = context.ApiDescription.ParameterDescriptions
                .Where(parameter => GetDefaultValueAttribute(parameter) != null || (GetParameterInfo(parameter)?.HasDefaultValue ?? false))
                .ToDictionary(parameter => parameter.Name, GetDefaultValue);
            if (parameterValuePairs.Count == 0) return;
            foreach (var parameter in operation.Parameters)
            {
                if (parameterValuePairs.TryGetValue(parameter.Name, out var defaultValue))
                {
                    parameter.Extensions.Add("default", new OpenApiString(defaultValue?.ToString()));

                }
            }
        }

        private SwaggerDefaultValueAttribute GetDefaultValueAttribute(ApiParameterDescription parameter)
        {
            if (!(parameter.ModelMetadata is DefaultModelMetadata metadata) || metadata.Attributes.PropertyAttributes == null)
            {
                return null;
            }

            return metadata.Attributes.PropertyAttributes
                .OfType<SwaggerDefaultValueAttribute>()
                .FirstOrDefault();
        }

        public ParameterInfo GetParameterInfo(ApiParameterDescription parameter)
后面还有 100 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。