30 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|