zoukankan      html  css  js  c++  java
  • .net5 过滤器返回通用结构 swagger使用IApplicationModelProvider自动化添加ProducesResponseType

    1. 创建通用返回结构及忽略特性
    public class ResultData<T>
            {
    			public int ret {get;set;}
    			public string msg {get;set;}
                public T Data { get; set; }
            }
    
      public class ApiIgnoreAttribute: Attribute
        {
        }
    
    1. 创建一个类继承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));
                            }
                        }
                    }
                }
            }
        }
    
    
    1. startup中添加
    //注入
    services.TryAddEnumerable(ServiceDescriptor.Transient<IApplicationModelProvider, ProduceResponseTypeModelProvider>());
    

    参考:
    ProducesResponseType自动化

    留待后查,同时方便他人
    联系我:renhanlinbsl@163.com
  • 相关阅读:
    phonegap_android配置文档
    JQueryMobile + PhoneGap 经验总结
    nand ECC 算法记录
    u-boot 2016.05 添加自己的board 以及config.h
    git commit 多行注释方法说明
    Ubuntu 下新建用户后无法sudo
    QT4.8.5 QComboBox 增加选择菜单记录
    Linux GPIO控制方法
    Qt5 can't find -LGL
    windows 端搭建nfs 服务器
  • 原文地址:https://www.cnblogs.com/ives/p/15691062.html
Copyright © 2011-2022 走看看