public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { var actionApiVersionModel = context.ApiDescription.ActionDescriptor?.GetApiVersion(); if (actionApiVersionModel == null) { return; } var documentVersion = context.ApiDescription.ActionDescriptor.Properties["docName"] .ToString() .Replace("v", string.Empty); var versionParameter = (operation.Parameters.FirstOrDefault( p => p.Name == "version" ) as NonBodyParameter); if (versionParameter != null) { versionParameter.Default = documentVersion; versionParameter.Enum = new List <object>() { documentVersion }; } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } var actionAttrs = context.ApiDescription.ActionAttributes(); var isAuthorized = actionAttrs.Any(a => a.GetType() == typeof(AuthorizeAttribute)); if (isAuthorized == false) //提供action都没有权限特性标记,检查控制器有没有 { var controllerAttrs = context.ApiDescription.ControllerAttributes(); isAuthorized = controllerAttrs.Any(a => a.GetType() == typeof(AuthorizeAttribute)); } var isAllowAnonymous = actionAttrs.Any(a => a.GetType() == typeof(AllowAnonymousAttribute)); if (isAuthorized && isAllowAnonymous == false) { operation.Parameters.Add(new NonBodyParameter() { Name = "Authorization", //添加Authorization头部参数 In = "header", Type = "string", Required = false }); } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { operation.Responses.Add("401", new Response { Description = "Unauthorized" }); operation.Responses.Add("403", new Response { Description = "Forbidden" }); operation.Responses.Add("500", new Response { Description = "Internal Server Error" }); operation.Description = ".Net Core Main API"; operation.Summary = "Authenticate to make authorize request to the Main API."; operation.ExternalDocs = new ExternalDocs { Description = "Contact", Url = "https://codepower.io" }; operation.Security = new List <IDictionary <string, IEnumerable <string> > > { new Dictionary <string, IEnumerable <string> > { { "Bearer", Enumerable.Empty <string>() } } }; }
/// <summary> /// Applies the filter to the specified operation using the given context. /// </summary> /// <param name="operation">The operation to apply the filter to.</param> /// <param name="context">The current operation filter context.</param> public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/412 // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/pull/413 foreach (var parameter in operation.Parameters.OfType <NonBodyParameter>()) { var description = context.ApiDescription.ParameterDescriptions.FirstOrDefault(p => p.Name == parameter.Name); if (description == null) { return; } if (parameter.Description == null) { parameter.Description = description.ModelMetadata.Description; } if (description.RouteInfo != null) { parameter.Required |= !description.RouteInfo.IsOptional; if (parameter.Default == null) { parameter.Default = description.RouteInfo.DefaultValue; } } //else //{ // parameter.Required = description.ModelMetadata.IsRequired; //} } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors; var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is AuthorizeFilter); var allowAnonymous = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is IAllowAnonymousFilter); if (isAuthorized && !allowAnonymous) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } var pm = new NonBodyParameter { Name = "angel-auth", In = "header", Description = "授权口令 Access Token", Required = true, Type = "string" }; #if DEBUG pm.Required = false; #endif operation.Parameters.Add(pm); } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { var controllerPermissions = context.ApiDescription.ControllerAttributes() .OfType <AbpAuthorizeAttribute>() .Select(attr => attr.Permissions); var actionPermissions = context.ApiDescription.ActionAttributes() .OfType <AbpAuthorizeAttribute>() .Select(attr => attr.Permissions); var permissions = controllerPermissions.Union(actionPermissions).Distinct() .SelectMany(p => p); if (permissions.Any()) { operation.Responses.Add("401", new Response { Description = "Unauthorized" }); operation.Responses.Add("403", new Response { Description = "Forbidden" }); operation.Security = new List <IDictionary <string, IEnumerable <string> > > { new Dictionary <string, IEnumerable <string> > { { "bearerAuth", permissions } } }; } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { //var controllerPolicies = context.ApiDescription.ControllerAttributes() // .OfType<AuthorizeAttribute>() // .Select(attr => attr.Policy); //var actionPolicies = context.ApiDescription.ActionAttributes() // .OfType<AuthorizeAttribute>() // .Select(attr => attr.Policy); //var policies = controllerPolicies.Union(actionPolicies).Distinct(); //var requiredClaimTypes = policies // .Select(x => this.authorizationOptions.Value.GetPolicy(x)) // .SelectMany(x => x.Requirements) // .OfType<ClaimsAuthorizationRequirement>() // .Select(x => x.ClaimType); //if (requiredClaimTypes.Any()) //{ // operation.Responses.Add("401", new Response { Description = "Unauthorized" }); // operation.Responses.Add("403", new Response { Description = "Forbidden" }); // operation.Security = new List<IDictionary<string, IEnumerable<string>>>(); // operation.Security.Add( // new Dictionary<string, IEnumerable<string>> // { // { "oauth2", requiredClaimTypes } // }); //} }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { string token = ""; if (operation == null) { return; } if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } if (!context.ApiDescription.RelativePath.ToLower().EndsWith("login")) { var parameter = new NonBodyParameter { Description = "Authorization token (Bearer)", @In = "header", Name = "Authorization", Default = "Bearer " + token, Required = true, Type = "string" }; operation.Parameters.Add(parameter); } }
/// <summary> /// 应用过滤器 /// </summary> /// <param name="operation"></param> /// <param name="context"></param> public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { #region 文件上传处理 if (!context.ApiDescription.HttpMethod.Equals("POST", StringComparison.OrdinalIgnoreCase) && !context.ApiDescription.HttpMethod.Equals("PUT", StringComparison.OrdinalIgnoreCase)) { return; } var fileParameters = context.ApiDescription.ActionDescriptor.Parameters.Where(n => n.ParameterType == typeof(IFormFile)).ToList(); if (fileParameters.Count < 0) { operation.Parameters.Clear(); return; } operation.Consumes.Add("multipart/form-data"); foreach (var fileParameter in fileParameters) { var parameter = operation.Parameters.Single(n => n.Name == fileParameter.Name); operation.Parameters.Remove(parameter); operation.Parameters.Add(new NonBodyParameter { Name = parameter.Name, In = "formData", Description = parameter.Description, Required = parameter.Required, Type = "file" }); } #endregion }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { // Check for authorize attribute var hasAuthorize = context.MethodInfo.DeclaringType.GetCustomAttributes(true) .Union(context.MethodInfo.GetCustomAttributes(true)) .OfType <AuthorizeAttribute>().Any(); if (hasAuthorize) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } operation.Responses.Add("401", new Response { Description = "Unauthorized" }); operation.Responses.Add("403", new Response { Description = "Forbidden" }); operation.Security = new List <IDictionary <string, IEnumerable <string> > >(); //Add JWT bearer type operation.Security.Add(new Dictionary <string, IEnumerable <string> > { { "Bearer", new string[] { } } }); } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { operation.Produces.Clear(); operation.Produces.Add("application/vnd.api+json"); operation.Consumes.Clear(); operation.Consumes.Add("application/vnd.api+json"); }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (context.SchemaRegistry.Definitions.Count == 4) { _oldDefinitionList.Clear(); } operation.Description += context.SchemaRegistry.Definitions .Where(x => !_oldDefinitionList.Contains(x.Key)) .SelectMany(x => x.Value.Properties) .Where(ps => ps.Value.Enum != null && ps.Value.Enum.Any()) .Where(x => x.Value.Enum.First().GetType() != typeof(ResultCode)) .Select(x => new EnumDescriber { Name = x.Key, Info = EnumInfo(x.Key, x.Value.Enum), }) .Concat(operation.Parameters .OfType <NonBodyParameter>() .Where(x => x.Enum != null && x.Enum.Any()) .Select(nonBodyParameter => new EnumDescriber { Name = nonBodyParameter.Name, Info = EnumInfo(nonBodyParameter.Name, nonBodyParameter.Enum) })) .GroupBy(x => x.Name.ToLower()) .Select(x => x.First()) .Select(x => x.Info) .JoinStr(string.Empty); _oldDefinitionList.AddRange(context.SchemaRegistry.Definitions.Select(x => x.Key)); }
/// <summary> /// Applies the filter to the specified operation using the given context. /// </summary> /// <param name="operation">The operation to apply the filter to.</param> /// <param name="context">The current operation filter context.</param> void IOperationFilter.Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { var apiDescription = context.ApiDescription; operation.Deprecated |= apiDescription.IsDeprecated(); if (operation.Parameters == null) { return; } // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/412 // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/pull/413 foreach (var parameter in operation.Parameters.OfType <NonBodyParameter>()) { var description = apiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name); if (parameter.Description == null) { parameter.Description = description.ModelMetadata?.Description; } if (parameter.Default == null) { parameter.Default = description.DefaultValue; } parameter.Required |= description.IsRequired; } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { // Check for authorize attribute var hasAuthorize = context.ApiDescription.ControllerAttributes().OfType <AuthorizeAttribute>().Any() || context.ApiDescription.ActionAttributes().OfType <AuthorizeAttribute>().Any(); if (hasAuthorize) { operation.Responses.Add("401", new Response { Description = "Unauthorized" }); operation.Responses.Add("403", new Response { Description = "Forbidden" }); operation.Security = new List <IDictionary <string, IEnumerable <string> > >(); operation.Security.Add(new Dictionary <string, IEnumerable <string> > { { "oauth2", new [] { "order" } } }); } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { var allremoveParams = operation.Parameters.Where(a => a.Name.Contains(".") ).ToList(); foreach (var obj in allremoveParams) { operation.Parameters.Remove(obj); } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } operation.Parameters.Add(new NonBodyParameter() { Name = "AccessToken" }); }
/// <summary> /// Swagger過濾邏輯 /// </summary> /// <param name="operation">操作</param> /// <param name="context">內容</param> public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if ((context.MethodInfo.GetCustomAttributes <AuthorizeAttribute>().Count() > 0 || context.MethodInfo.DeclaringType.GetCustomAttributes <AuthorizeAttribute>().Count() > 0) && context.MethodInfo.GetCustomAttributes <AllowAnonymousAttribute>().Count() == 0 && context.MethodInfo.DeclaringType.GetCustomAttributes <AllowAnonymousAttribute>().Count() == 0 ) { operation.Summary = "🔐" + operation.Summary; } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { #region header里增加token参数 var versionParameter = operation.Parameters.Single(p => p.Name == "version"); operation.Parameters.Remove(versionParameter); var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors; //查找模型绑定的TokenModel参数 var isExist = filterPipeline.Select(filterInfo => filterInfo.Filter).Any(filter => filter is TokenValidateAttribute); //存在,用token代替 if (isExist) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } context.ApiDescription.ParameterDescriptions .Where(desc => desc.ParameterDescriptor != null && desc.ParameterDescriptor.ParameterType != null && desc.ParameterDescriptor.ParameterType == typeof(TokenModel)) .ToList() .ForEach(param => { var toRemove = operation.Parameters .FirstOrDefault(p => p.Name == param.Name); //删除 if (null != toRemove) { operation.Parameters.Remove(toRemove); } }); //添加 operation.Parameters.Add(new NonBodyParameter { Name = "token", In = "header", Description = "@Order=2,access token", Required = true, Type = "string", }); } #endregion #region 参数排序 var parames = operation.Parameters.OrderBy(p => p, new ParameterSortComparer()).ToList(); foreach (var parameter in parames) { SetDescription(parameter); } operation.Parameters.Clear(); operation.Parameters = parames; #endregion }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } operation.Parameters.Add(new HeaderParameter() { Name = "api-key", In = "header", Type = "string", Required = true }); }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } operation.Parameters.Add(new NonBodyParameter() { Name = "token", In = "header", Type = "string", Description = "token认证信息", Required = true }); }
void IOperationFilter.Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { var param = new Param(); param.Name = "authorization"; param.In = "header"; param.Description = "JWT Token"; param.Required = false; param.Type = "string"; if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } operation.Parameters.Add(param); }
/// <summary> /// Apply function /// </summary> /// <param name="swaggerDocument">swaggerDocument parameter</param> /// <param name="documentFilter">documentFilter parameter </param> public void Apply(Operation swaggerDocument, OperationFilterContext documentFilter) { if (swaggerDocument.Parameters == null) { swaggerDocument.Parameters = new List <IParameter>(); } swaggerDocument.Parameters.Add(new NonBodyParameter { Name = "Authorization", In = "header", Type = "string", Required = true }); }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (operation.OperationId.ToLower() == "apivaluesuploadput") { operation.Parameters.Clear(); operation.Parameters.Add(new NonBodyParameter { Name = "file", In = "formData", Description = "Upload File", Required = true, Type = "file" }); operation.Consumes.Add("multipart/form-data"); } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } operation.Parameters.Add(new NonBodyParameter { Name = "authorization", In = "header", Type = "string", Required = false }); }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, Swashbuckle.AspNetCore.SwaggerGen.OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <Swashbuckle.AspNetCore.Swagger.IParameter>(); } operation.Parameters.Add(new Swashbuckle.AspNetCore.Swagger.NonBodyParameter { Name = "CompanyId", In = "header", Type = "string", Required = true }); }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (operation.OperationId.ToLower(CultureInfo.CurrentCulture) == "apitopicscreateresourcesuploadpost") { operation.Parameters.Clear(); operation.Parameters.Add(new NonBodyParameter { Name = "uploadedFile", In = "formData", Description = "Upload File", Required = true, Type = "file" }); operation.Consumes.Add("multipart/form-data"); } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } operation.Parameters.Add(new NonBodyParameter { In = "header", Name = "Authorization", Description = "Auth Token.", Required = true, Type = "string", Default = $"{_authSchemeName} ###" }); }
/// <summary> /// Swagger過濾邏輯 /// </summary> /// <param name="operation">操作</param> /// <param name="context">內容</param> public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { var filesParams = context.ApiDescription.ActionDescriptor .Parameters .Where(x => x.ParameterType == typeof(IFormFileCollection)); if (operation.Parameters?.Count > 0) { var parameters2 = operation.Parameters .Where(x => filesParams.Any(y => x.Name == y.Name)); foreach (NonBodyParameter parameter in parameters2) { parameter.Type = "file"; } } }
public void Apply(Swashbuckle.AspNetCore.Swagger.Operation operation, OperationFilterContext context) { foreach (var parameter in operation.Parameters.OfType <NonBodyParameter>()) { var description = context.ApiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name); if (parameter.Description == null) { parameter.Description = description.ModelMetadata.Description; } if (parameter.Default == null) { parameter.Default = description.RouteInfo.DefaultValue; } parameter.Required |= !description.RouteInfo.IsOptional; } }
/// <summary> /// /// </summary> /// <param name="operation"></param> /// <param name="context"></param> public void Apply(Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <IParameter>(); } if (context.MethodInfo.GetCustomAttributes(typeof(AllowAnonymousAttribute), true).Length == 0) { operation.Parameters.Add(new NonBodyParameter() { Name = "Authorization", //添加Authorization头部参数 In = "header", Type = "string", Required = false }); } }