Core3.0 升级swagger 配置区别

Nuget 安装包区别

Core2.2

 Core3.0

 

IDocumentFilter区别

Core2.2

 

Core3.0

Core 2.2

app.UseSwagger(c =>
{
  c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Host = httpReq.Host.Value);
});

  

Core 3.0

app.UseSwagger(c =>
{
  c.PreSerializeFilters.Add((swagger, httpReq) =>
  {
    swagger.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}" } };
  });
});

原使用到的info改变为OpenApiInfo

Microsoft.OpenApi 代替 Swashbuckle.AspNetCore.Swagger

Core 2.2

Core 3.0

Swagger 添加 token Header区别

Core 2.2

public class AddAuthTokenHeaderParameter : IOperationFilter
    {
        public void Apply(Operation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
                operation.Parameters = new List<IParameter>();

            var attrs = context.ApiDescription.ActionDescriptor.AttributeRouteInfo;

            //先判断是否是匿名访问,
            var descriptor = context.ApiDescription.ActionDescriptor as ControllerActionDescriptor;
            if (descriptor != null)
            {
                //var isAuthorized = descriptor..Select(filterInfo => filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);

                var actionAttributes = descriptor.MethodInfo.GetCustomAttributes(inherit: true);

                bool isAnonymous = actionAttributes.Any(a => a is AllowAnonymousAttribute);
                bool isAuthorized = actionAttributes.Any(a => a is AuthorizeAttribute);
                //非匿名的方法,链接中添加accesstoken值
                if (!isAnonymous && isAuthorized)
                {
                    operation.Parameters.Add(new NonBodyParameter()
                    {
                        Name = "Authorization",
                        In = "header",//query header body path formData
                        Type = "string",
                        Default = "",
                        Required = true //是否必选
                    });
                }

            }
        }
    }

  Core 3.0

public class AddAuthTokenHeaderParameter : IOperationFilter
    {
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (operation.Parameters == null)
            {
                operation.Parameters = new List<OpenApiParameter>();
            }

            var attrs = context.ApiDescription.ActionDescriptor.AttributeRouteInfo;

            //先判断是否是匿名访问,
            var descriptor = context.ApiDescription.ActionDescriptor as ControllerActionDescriptor;
            if (descriptor != null)
            {
                //var isAuthorized = descriptor..Select(filterInfo => filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);

                var actionAttributes = descriptor.MethodInfo.GetCustomAttributes(inherit: true);

                bool isAnonymous = actionAttributes.Any(a => a is AllowAnonymousAttribute);
                bool isAuthorized = actionAttributes.Any(a => a is AuthorizeAttribute);
                //非匿名的方法,链接中添加accesstoken值
                if (!isAnonymous && isAuthorized)
                {
                    operation.Parameters.Add(new OpenApiParameter()
                    {
                        Name = "Authorization",
                        In= ParameterLocation.Header,//query header body path formData
                        Description="Token验证",
                         Schema = new OpenApiSchema() { 
                            Type="string",
                         },
                        //In = "header",//query header body path formData
                        //Type = "string",
                        //Default = "",
                        Required = true //是否必选
                    });
                }

            }
        }
    }

  

原文地址:https://www.cnblogs.com/zxcnn/p/11654261.html