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 算力,解读结果公开显示在下面。
还没有人解读过这个文件。