CSharp.Template/YuanXuan.IM.Api/Filters/NullableParameterFilter.cs

30 lines
1.1 KiB
C#

using System.Reflection;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace LearningOfficer.OA.Mobile.Api.Filters
{
public class NullableParameterFilter : IParameterFilter
{
public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
{
if (context.ApiParameterDescription.Type is null)
return;
if (Nullable.GetUnderlyingType(context.ApiParameterDescription.Type) != null)
{
parameter.Schema.Nullable = true;
}
else if (context.ApiParameterDescription.Type.IsClass || context.ApiParameterDescription.Type.IsInterface)
{
var nullableAttribute = context.ParameterInfo?.GetCustomAttribute<System.Runtime.CompilerServices.NullableAttribute>();
if (nullableAttribute != null || context.ApiParameterDescription.Type.FullName?.Contains("System.Nullable") == true)
{
parameter.Schema.Nullable = true;
}
}
}
}
}