public void Apply(Operation operation, OperationFilterContext context) { // Correspond each "Authorize" role to an oauth2 scope var controllerScopes = context.ApiDescription.GetControllerAttributes() .OfType<AuthorizeAttribute>() .SelectMany(attr => attr.Roles.Split(',')); var actionScopes = context.ApiDescription.GetActionAttributes() .OfType<AuthorizeAttribute>() .SelectMany(attr => attr.Roles.Split(',')); var scopes = controllerScopes.Union(actionScopes).Distinct(); if (scopes.Any()) { if (operation.Security == null) operation.Security = new List<IDictionary<string, IEnumerable<string>>>(); var oAuthRequirements = new Dictionary<string, IEnumerable<string>> { { "oauth2", scopes } }; operation.Security.Add(oAuthRequirements); } }
public void Apply(Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { return; } var parameters = operation.Parameters.Select(p => p.Name); operation.OperationId = string.Format("{0}_by_{1}", operation.OperationId, string.Join("_and_", parameters)); }
/// <summary> /// Called when generating the operation /// </summary> public void Apply(Operation operation, OperationFilterContext context) { operation.OperationId = "GarbageCollection_Get"; foreach (var dtParam in operation.Parameters.Where(x => x is NonBodyParameter).Cast<NonBodyParameter>()) { // TODO: Make this less hacky when possible! if (dtParam.Name == "addr") dtParam.Required = true; } }
public void Apply(Operation operation, OperationFilterContext context) { var apiDesc = context.ApiDescription; var controllerAttributes = apiDesc.GetControllerAttributes().OfType<SwaggerOperationFilterAttribute>(); var actionAttributes = apiDesc.GetActionAttributes().OfType<SwaggerOperationFilterAttribute>(); foreach (var attribute in controllerAttributes.Union(actionAttributes)) { var filter = (IOperationFilter)Activator.CreateInstance(attribute.FilterType); filter.Apply(operation, context); } }
public void Apply(Operation operation, OperationFilterContext context) { var attribute = context.ApiDescription.GetActionAttributes() .OfType<SwaggerOperationAttribute>() .FirstOrDefault(); if (attribute == null) return; if (attribute.OperationId != null) operation.OperationId = attribute.OperationId; if (attribute.Tags != null) operation.Tags = attribute.Tags; if (attribute.Schemes != null) operation.Schemes = attribute.Schemes; }
public void Apply(Operation operation, OperationFilterContext context) { var apiDesc = context.ApiDescription; if (apiDesc.GetControllerAttributes().OfType<SwaggerResponseRemoveDefaultsAttribute>().Any() || apiDesc.GetActionAttributes().OfType<SwaggerResponseRemoveDefaultsAttribute>().Any()) { operation.Responses.Clear(); } var controllerAttributes = apiDesc.GetControllerAttributes().OfType<SwaggerResponseAttribute>() .OrderBy(attr => attr.StatusCode); ApplyResponsesFrom(controllerAttributes, operation, context.SchemaRegistry); var actionAttributes = apiDesc.GetActionAttributes().OfType<SwaggerResponseAttribute>() .OrderBy(attr => attr.StatusCode); ApplyResponsesFrom(actionAttributes, operation, context.SchemaRegistry); }
public void Apply(Operation operation, OperationFilterContext context) { var controllerActionDescriptor = context.ApiDescription.ActionDescriptor as ControllerActionDescriptor; if (controllerActionDescriptor == null) return; var methodXPath = GetMethodXPath(controllerActionDescriptor.MethodInfo); var methodNode = _navigator.SelectSingleNode(methodXPath); if (methodNode == null) return; var summaryNode = methodNode.SelectSingleNode(SummaryExpression); if (summaryNode != null) operation.Summary = summaryNode.ExtractContent(); var remarksNode = methodNode.SelectSingleNode(RemarksExpression); if (remarksNode != null) operation.Description = remarksNode.ExtractContent(); ApplyParamComments(operation, methodNode); }
/// <summary> /// Constructor /// </summary> /// <param name="operation">Operation</param> /// <param name="context">OperationFilterContext</param> public void Apply(OpenApiOperation operation, OperationFilterContext context) { var pars = context.ApiDescription.ParameterDescriptions; foreach (var par in pars) { var swaggerParam = operation.Parameters.SingleOrDefault(p => p.Name == par.Name); var attributes = ((ControllerParameterDescriptor)par.ParameterDescriptor).ParameterInfo.CustomAttributes; if (attributes != null && attributes.Count() > 0 && swaggerParam != null) { // Required - [Required] var requiredAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RequiredAttribute)); if (requiredAttr != null) { swaggerParam.Required = true; } // Regex Pattern [RegularExpression] var regexAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RegularExpressionAttribute)); if (regexAttr != null) { string regex = (string)regexAttr.ConstructorArguments[0].Value; if (swaggerParam is OpenApiParameter) { ((OpenApiParameter)swaggerParam).Schema.Pattern = regex; } } // String Length [StringLength] int?minLenght = null, maxLength = null; var stringLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(StringLengthAttribute)); if (stringLengthAttr != null) { if (stringLengthAttr.NamedArguments.Count == 1) { minLenght = (int)stringLengthAttr.NamedArguments.Single(p => p.MemberName == "MinimumLength").TypedValue.Value; } maxLength = (int)stringLengthAttr.ConstructorArguments[0].Value; } var minLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(MinLengthAttribute)); if (minLengthAttr != null) { minLenght = (int)minLengthAttr.ConstructorArguments[0].Value; } var maxLengthAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(MaxLengthAttribute)); if (maxLengthAttr != null) { maxLength = (int)maxLengthAttr.ConstructorArguments[0].Value; } if (swaggerParam is OpenApiParameter) { ((OpenApiParameter)swaggerParam).Schema.MinLength = minLenght; ((OpenApiParameter)swaggerParam).Schema.MaxLength = maxLength; } // Range [Range] var rangeAttr = attributes.FirstOrDefault(p => p.AttributeType == typeof(RangeAttribute)); if (rangeAttr != null) { int rangeMin = (int)rangeAttr.ConstructorArguments[0].Value; int rangeMax = (int)rangeAttr.ConstructorArguments[1].Value; if (swaggerParam is OpenApiParameter) { ((OpenApiParameter)swaggerParam).Schema.Minimum = rangeMin; ((OpenApiParameter)swaggerParam).Schema.Maximum = rangeMax; } } } } }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { operation.Responses.Add("401", new OpenApiResponse { Description = "Unauthorized" }); }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { operation.OperationId = context.MethodInfo.Name; }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { var responses = operation.Responses; }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { operation.Responses.Clear(); operation.Responses.Add("200", new OpenApiResponse { Description = "The image in the desired encoding (text/plain or image/png).", Content = new Dictionary <string, OpenApiMediaType> { { "text/plain", new OpenApiMediaType { Examples = new Dictionary <string, OpenApiExample> { { "Usage in HTML", new OpenApiExample { Description = "This is how to embed an example Base64-encoded image in HTML. This is not the image you generated above.", Value = new OpenApiString( $"<img alt=\"{AltText}\" src=\"data:image/png;base64,{ExampleBase64}\">") } }, { "Usage in Markdown", new OpenApiExample { Description = "This is how to embed an example Base64-encoded image in Markdown. This is not the image you generated above.", Value = new OpenApiString( $"![{AltText}](data:image/png;base64,{ExampleBase64})") } } } } }, { "image/png", new OpenApiMediaType { Examples = new Dictionary <string, OpenApiExample> { { "Usage in HTML", new OpenApiExample { Description = "This is how to load an example binary image in HTML. This is not the image you generated above.", Value = new OpenApiString( $"<img alt=\"{AltText}\" src=\"{Uri}\">") } }, { "Usage in Markdown", new OpenApiExample { Description = "This is how to load an example binary image in Markdown. This is not the image you generated above.", Value = new OpenApiString( $"![{AltText}]({Uri})") } } } } } } }); operation.Responses.Add("400", new OpenApiResponse { Description = "The input was invalid." }); }
public void Apply(Operation operation, OperationFilterContext context) { ApplyConstraintsXmlToActionParameters(operation.Parameters, context.ApiDescription); }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { operation.Responses.TryAdd("default", GetResponse("Error")); }
protected void SetSwaggerResponses(OpenApiOperation operation, OperationFilterContext filterContext) { var swaggerResponseFilter = new AnnotationsOperationFilter(); swaggerResponseFilter.Apply(operation, filterContext); }
private bool ContextHasAutoValidateAttributes(OperationFilterContext context) => GetAutoValidateAttributesFromContext(context).Any();
public void Apply(Operation operation, OperationFilterContext context) { operation.Responses.Add("400", new Response { Description = "Bad request" }); }
public void Apply(Operation operation, OperationFilterContext contex) { operation.Extensions.Add("X-property1", "value"); }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { operation.Parameters = operation.Parameters.Where( x => !objectIdIgnoreParameters.Contains(x.Name) ).ToList(); }
public void Apply(Operation operation, OperationFilterContext context) { operation.Extensions.Add("x-purpose", "test"); }
public void Apply(Operation operation, OperationFilterContext contex) { operation.Extensions.Add("X-property1", "value"); }
public void Apply(Operation operation, OperationFilterContext context) { SetRequestModelExamples(operation, context); SetResponseModelExamples(operation, context); }
private static IEnumerable <AutoValidateAttribute> GetAutoValidateAttributesFromContext(OperationFilterContext context) => context.MethodInfo.ReflectedType.GetCustomAttributes(true) .Union(context.MethodInfo.GetCustomAttributes(true)) .OfType <AutoValidateAttribute>();
public void Apply(OpenApiOperation operation, OperationFilterContext context) { if (operation.Parameters == null) { operation.Parameters = new List <OpenApiParameter>(); } operation.Parameters.Add(new OpenApiParameter { Name = "x-partner-name", Description = "Client resgistered name", In = ParameterLocation.Header, Required = true, Schema = new OpenApiSchema() { Type = "string" } }); IDictionary <string, OpenApiExample> examples = new Dictionary <string, OpenApiExample> { { "par1", new OpenApiExample { Description = "CIS Number: CISNumber|12345678", Summary = "CISNumber" } }, { "par2", new OpenApiExample { Description = "ELB Number: ELBNumber|12345678", Summary = "ELBNumber" } }, { "par3", new OpenApiExample { Description = "Routing and ELb: RoutingAndElbNumber|101000695:123456781231231", Summary = "RoutingAndElbNumber" } } }; operation.Parameters.Add(new OpenApiParameter { Name = "x-customer-id", Description = "Customer Id", In = ParameterLocation.Header, Required = true, Schema = new OpenApiSchema() { Type = "string" }, Examples = examples }); IDictionary <string, OpenApiExample> requestIdSample = new Dictionary <string, OpenApiExample> { { "part1", new OpenApiExample { Description = "2c4d133b-52e6-4e8a-a88b-1e69c069aeae", Summary = "GUID" } } }; operation.Parameters.Add(new OpenApiParameter { Name = "RequestId", Description = "Operation id", In = ParameterLocation.Header, Required = true, Schema = new OpenApiSchema() { Type = "string" }, Examples = requestIdSample }); }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { operation.Description = $"Relative Path: {context.ApiDescription.RelativePath}"; }
public void Apply(Operation operation, OperationFilterContext context) { operation.Parameters?.Remove(operation.Parameters?.Where(x => x.Name == "SyncRoot").FirstOrDefault()); }
public void Apply(Operation operation, OperationFilterContext context) { Filter(operation, context); }
public void Apply(Operation operation, OperationFilterContext context) { operation.Description = operation.Description?.Replace("&", "&"); operation.Summary = operation.Summary?.Replace("&", "&"); }
public void Apply(Operation operation, OperationFilterContext context) { var controllerActionDescriptor = context.ApiDescription.ActionDescriptor as ControllerActionDescriptor; if (controllerActionDescriptor == null) { return; } var pluralizer = new Pluralizer(); var actionName = controllerActionDescriptor.ActionName; var singularizeName = pluralizer.Singularize(controllerActionDescriptor.ControllerName); var pluralizeName = pluralizer.Pluralize(singularizeName); var parameterCount = operation.Parameters.Where(p => p.Name != "version" && p.Name != "api-version").Count(); if (IsGetAllAction()) { if (!operation.Summary.HasValue()) { operation.Summary = $"Returns all {pluralizeName}"; } } else if (IsActionName("Post", "Create")) { if (!operation.Summary.HasValue()) { operation.Summary = $"Creates a {singularizeName}"; } if (!operation.Parameters[0].Description.HasValue()) { operation.Parameters[0].Description = $"A {singularizeName} representation"; } } else if (IsActionName("Read", "Get")) { if (!operation.Summary.HasValue()) { operation.Summary = $"Retrieves a {singularizeName} by unique id"; } if (!operation.Parameters[0].Description.HasValue()) { operation.Parameters[0].Description = $"a unique id for the {singularizeName}"; } } else if (IsActionName("Put", "Edit", "Update")) { if (!operation.Summary.HasValue()) { operation.Summary = $"Updates a {singularizeName} by unique id"; } //if (!operation.Parameters[0].Description.HasValue()) // operation.Parameters[0].Description = $"A unique id for the {singularizeName}"; if (!operation.Parameters[0].Description.HasValue()) { operation.Parameters[0].Description = $"A {singularizeName} representation"; } } else if (IsActionName("Delete", "Remove")) { if (!operation.Summary.HasValue()) { operation.Summary = $"Deletes a {singularizeName} by unique id"; } if (!operation.Parameters[0].Description.HasValue()) { operation.Parameters[0].Description = $"A unique id for the {singularizeName}"; } } #region Local Functions bool IsGetAllAction() { foreach (var name in new[] { "Get", "Read", "Select" }) { if ((actionName.Equals(name, StringComparison.OrdinalIgnoreCase) && parameterCount == 0) || actionName.Equals($"{name}All", StringComparison.OrdinalIgnoreCase) || actionName.Equals($"{name}{pluralizeName}", StringComparison.OrdinalIgnoreCase) || actionName.Equals($"{name}All{singularizeName}", StringComparison.OrdinalIgnoreCase) || actionName.Equals($"{name}All{pluralizeName}", StringComparison.OrdinalIgnoreCase)) { return(true); } } return(false); } bool IsActionName(params string[] names) { foreach (var name in names) { if (actionName.Equals(name, StringComparison.OrdinalIgnoreCase) || actionName.Equals($"{name}ById", StringComparison.OrdinalIgnoreCase) || actionName.Equals($"{name}{singularizeName}", StringComparison.OrdinalIgnoreCase) || actionName.Equals($"{name}{singularizeName}ById", StringComparison.OrdinalIgnoreCase)) { return(true); } } return(false); } #endregion }
private Operation CreateOperation(ApiDescription apiDescription, ISchemaRegistry schemaRegistry) { var groupName = _options.GroupNameSelector(apiDescription); var parameters = apiDescription.ParameterDescriptions .Where(paramDesc => paramDesc.Source.IsFromRequest) .Select(paramDesc => CreateParameter(paramDesc, schemaRegistry)) .ToList(); var responses = new Dictionary<string, Response>(); if (apiDescription.ResponseType == typeof(void)) responses.Add("204", new Response { Description = "No Content" }); else responses.Add("200", CreateSuccessResponse(apiDescription.ResponseType, schemaRegistry)); var operation = new Operation { Tags = (groupName != null) ? new[] { groupName } : null, OperationId = apiDescription.ActionDescriptor.DisplayName, Produces = apiDescription.Produces().ToList(), //consumes = apiDescription.Consumes().ToList(), Parameters = parameters.Any() ? parameters : null, // parameters can be null but not empty Responses = responses, Deprecated = apiDescription.IsObsolete() }; var filterContext = new OperationFilterContext(apiDescription, schemaRegistry); foreach (var filter in _options.OperationFilters) { filter.Apply(operation, filterContext); } return operation; }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { var versionParameter = operation.Parameters.SingleOrDefault(p => p.Name == "apiVersion"); operation.Parameters.Remove(versionParameter); }
public void Apply(Operation operation, OperationFilterContext context) { operation.Extensions.Add("x-purpose", "test"); }
void ApplyInternal(Operation operation, OperationFilterContext context) { if (operation.Parameters == null) { return; } var schemaIdSelector = _swaggerGenOptions.SchemaRegistryOptions.SchemaIdSelector ?? new SchemaRegistryOptions().SchemaIdSelector; foreach (var operationParameter in operation.Parameters) { var apiParameterDescription = context.ApiDescription.ParameterDescriptions.FirstOrDefault(description => description.Name.Equals(operationParameter.Name, StringComparison.InvariantCultureIgnoreCase)); var modelMetadata = apiParameterDescription?.ModelMetadata; if (modelMetadata != null) { var parameterType = modelMetadata.ContainerType; if (parameterType == null) { continue; } var validator = _validatorFactory.GetValidator(parameterType); if (validator == null) { continue; } var key = modelMetadata.PropertyName; var validatorsForMember = validator.GetValidatorsForMemberIgnoreCase(key); var lazyLog = new LazyLog(_logger, logger => logger.LogDebug($"Applying FluentValidation rules to swagger schema for type '{parameterType}' from operation '{operation.OperationId}'.")); Schema schema = null; foreach (var propertyValidator in validatorsForMember) { foreach (var rule in _rules) { if (rule.Matches(propertyValidator)) { try { var schemaId = schemaIdSelector(parameterType); if (!context.SchemaRegistry.Definitions.TryGetValue(schemaId, out schema)) { schema = context.SchemaRegistry.GetOrRegister(parameterType); } if (schema.Properties == null && context.SchemaRegistry.Definitions.ContainsKey(schemaId)) { schema = context.SchemaRegistry.Definitions[schemaId]; } if (schema.Properties != null && schema.Properties.Count > 0) { lazyLog.LogOnce(); rule.Apply(new RuleContext(schema, new SchemaFilterContext(parameterType, null, context.SchemaRegistry), key.ToLowerCamelCase(), propertyValidator)); _logger.LogDebug($"Rule '{rule.Name}' applied for property '{parameterType.Name}.{key}'."); } else { _logger.LogDebug($"Rule '{rule.Name}' skipped for property '{parameterType.Name}.{key}'."); } } catch (Exception e) { _logger.LogWarning(0, e, $"Error on apply rule '{rule.Name}' for property '{parameterType.Name}.{key}'."); } } } } if (schema?.Required != null) { operationParameter.Required = schema.Required.Contains(key, StringComparer.InvariantCultureIgnoreCase); } if (schema?.Properties != null) { var parameterSchema = operationParameter as PartialSchema; if (operationParameter != null) { if (schema.Properties.TryGetValue(key.ToLowerCamelCase(), out var property) || schema.Properties.TryGetValue(key, out property)) { parameterSchema.MinLength = property.MinLength; parameterSchema.MaxLength = property.MaxLength; parameterSchema.Pattern = property.Pattern; parameterSchema.Minimum = property.Minimum; parameterSchema.Maximum = property.Maximum; parameterSchema.ExclusiveMaximum = property.ExclusiveMaximum; parameterSchema.ExclusiveMinimum = property.ExclusiveMinimum; } } } } } }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { var apiDescription = context.ApiDescription; var scopeAttributes = GetMethodOrControllerAttributes <SwaggerRequiredScopesAttribute>(apiDescription).ToArray(); // skip if operation does not have ScopeAttribute if (!scopeAttributes.Any()) { return; } operation.Responses.Add("401", new OpenApiResponse { Description = "Unauthorized" }); operation.Responses.Add("403", new OpenApiResponse { Description = "Forbidden" }); var scopes = (from item in scopeAttributes from scope in item.Scopes select scope) .Distinct() .OrderBy(x => x) .ToArray(); operation.Security = new List <OpenApiSecurityRequirement> { new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Id = OAuth2Security.OAuth2, Type = ReferenceType.SecurityScheme } }, scopes }, { new OpenApiSecurityScheme { Reference = new OpenApiReference { Id = OAuth2Security.AuthorizationCode, Type = ReferenceType.SecurityScheme } }, scopes }, { new OpenApiSecurityScheme { Reference = new OpenApiReference { Id = OAuth2Security.Implicit, Type = ReferenceType.SecurityScheme } }, scopes }, { new OpenApiSecurityScheme { Reference = new OpenApiReference { Id = OAuth2Security.ClientCredentials, Type = ReferenceType.SecurityScheme } }, scopes }, { new OpenApiSecurityScheme { Reference = new OpenApiReference { Id = OAuth2Security.ResourceOwnerPasswordCredentials, Type = ReferenceType.SecurityScheme } }, scopes } } }; }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { var apiDescription = context.ApiDescription; operation.Deprecated |= apiDescription.IsDeprecated(); if (operation.Parameters == null) { return; } foreach (var response in operation.Responses) { BaseException baseException; switch (response.Key) { case "400": baseException = new BadRequestException(); break; case "401": baseException = new UnauthorizedException(); break; case "403": baseException = new UnauthorizedException(); break; case "404": baseException = new NotFoundException(); break; case "406": baseException = new NotAcceptableException(); break; case "422": baseException = new UnprocessableException(); break; case "500": baseException = new InternalServerError(); break; default: baseException = null; break; } if (baseException != null) { response.Value.Description = baseException.ProblemDetailsModel.Detail; } } foreach (var parameter in operation.Parameters) { var description = apiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name); if (String.IsNullOrEmpty(parameter.Description) && !String.IsNullOrEmpty(description?.ModelMetadata?.Description)) { parameter.Description = description.ModelMetadata?.Description; } if (parameter.Schema.Default == null && description.DefaultValue != null) { parameter.Schema.Default = new OpenApiString(description.DefaultValue.ToString()); } parameter.Required |= description.IsRequired; } }
public void Apply(Operation operation, OperationFilterContext context) { operation.Responses.Add("500", new Response { Description = "Internal server error" }); }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { operation.OperationId = FriendlyId(context.ApiDescription); }
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(p => typeof(AuthorizeAttribute).IsAssignableFrom(p.GetType())); if (isAuthorized == false) //提供action都没有权限特性标记,检查控制器有没有 { var controllerAttrs = context.ApiDescription.ControllerAttributes(); isAuthorized = controllerAttrs.Any(p => typeof(AuthorizeAttribute).IsAssignableFrom(p.GetType())); } //添加参数 operation.Parameters.Add(new NonBodyParameter() { Name = "requestTime", In = "query", //query header body path formData Type = "string", Required = true //是否必选 }); operation.Parameters.Add(new NonBodyParameter() { Name = "nonce_str", In = "query", //query header body path formData Type = "string", Required = true //是否必选 }); operation.Parameters.Add(new NonBodyParameter() { Name = "sign", In = "query", //query header body path formData Type = "string", Required = true //是否必选 }); 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 }); } if (operation.Security == null) { operation.Security = new List <IDictionary <string, IEnumerable <string> > >(); } var oAuthRequirements = new Dictionary <string, IEnumerable <string> > { { "oauth2", new List <string> { "openid", "profile", "Api" } } }; operation.Security.Add(oAuthRequirements); //上传文件 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" }); } }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { var method = context.MethodInfo; var enabled = method.GetCustomAttributes(typeof(EnableQueryAttribute), true).Length > 0; if (!enabled) { return; } operation.Parameters.Add(new OpenApiParameter { Name = "$select", Description = "OData select expression", In = ParameterLocation.Query, Required = false, Schema = new OpenApiSchema { Type = "string" } }); operation.Parameters.Add(new OpenApiParameter { Name = "$filter", Description = "OData filter expression", In = ParameterLocation.Query, Required = false, Schema = new OpenApiSchema { Type = "string" } }); operation.Parameters.Add(new OpenApiParameter { Name = "$orderby", Description = "OData order-by expression", In = ParameterLocation.Query, Required = false, Schema = new OpenApiSchema { Type = "string" } }); operation.Parameters.Add(new OpenApiParameter { Name = "$skip", Description = "OData 'skip' attribute. Usable for paging.", In = ParameterLocation.Query, Required = false, Schema = new OpenApiSchema { Type = "integer" } }); operation.Parameters.Add(new OpenApiParameter { Name = "$top", Description = "OData 'top' attribute. Usable for paging.", In = ParameterLocation.Query, Required = false, Schema = new OpenApiSchema { Type = "integer" } }); operation.Parameters.Add(new OpenApiParameter { Name = "$apply", Description = "OData 'apply' attribute. Usable for grouping, aggregations etc.", In = ParameterLocation.Query, Required = false, Schema = new OpenApiSchema { Type = "string" } }); }
/// <summary> /// Called when generating the operation /// </summary> public void Apply(Operation operation, OperationFilterContext context) { foreach (var dtParam in operation.Parameters.Where(x => x is NonBodyParameter).Cast<NonBodyParameter>()) { if (dtParam.In == "modelbinding") dtParam.In = "query"; if (dtParam.Format == "date-time") dtParam.Format = "date"; } }