- 创建通用返回结构及忽略特性
public class ResultData<T>
{
public int ret {get;set;}
public string msg {get;set;}
public T Data { get; set; }
}
public class ApiIgnoreAttribute: Attribute
{
}
- 创建一个类继承IApplicationModelProvider
public class ProduceResponseTypeModelProvider : IApplicationModelProvider
{
public int Order => 0;
public void OnProvidersExecuted(ApplicationModelProviderContext context)
{
}
public void OnProvidersExecuting(ApplicationModelProviderContext context)
{
foreach (ControllerModel controller in context.Result.Controllers)
{
foreach (ActionModel action in controller.Actions)
{
if (!action.Filters.Any(e => (e is ProducesResponseTypeAttribute producesResponseType) && producesResponseType.StatusCode == StatusCodes.Status200OK))
{
//跳过带有ApiIgnoreAttribute的action
if (action.Attributes.Any(f => (f is ApiIgnoreAttribute)))
{
continue;
}
if (action.ActionMethod.ReturnType != null)
{
Type type = typeof(ResultData<>);
//忽略原先旧接口返回类型,后续可移除
if (action.ActionMethod.ReturnType.IsGenericType &&action.ActionMethod.ReturnType.GetGenericTypeDefinition() == type)
{
continue;
}
type = type.MakeGenericType(action.ActionMethod.ReturnType);
action.Filters.Add(new ProducesResponseTypeAttribute(type, StatusCodes.Status200OK));
}
}
}
}
}
}
- startup中添加
//注入
services.TryAddEnumerable(ServiceDescriptor.Transient<IApplicationModelProvider, ProduceResponseTypeModelProvider>());
参考:
ProducesResponseType自动化