Beispiel #1
0
        private Operation CreateOperation(ApiDescription apiDescription, SchemaRegistry schemaRegistry)
        {
            var parameters = apiDescription.ParameterDescriptions
                             .Select(paramDesc =>
            {
                var inPath = apiDescription.RelativePathSansQueryString().Contains("{" + paramDesc.Name + "}");

                return(CreateParameter(paramDesc, inPath, schemaRegistry));
            })
                             .ToList();

            //parameters.Add(new Parameter()
            //{
            //    @in = "header",
            //    description = "Custom header values",
            //    ignore = false,
            //    name = "SomeHeaderValue",
            //    schema = new Schema()
            //    {
            //        type = "array",
            //        // items = new Schema() { type = "string" }
            //    }
            //});

            var responses    = new Dictionary <string, Response>();
            var responseType = apiDescription.ResponseType();

            if (responseType == null || responseType == typeof(void))
            {
                responses.Add("204", new Response {
                    description = "No Content"
                });
            }
            else
            {
                responses.Add("200", new Response {
                    description = "OK", schema = schemaRegistry.GetOrRegister(responseType)
                });
            }

            var operation = new Operation
            {
                tags        = new[] { _options.GroupingKeySelector(apiDescription) },
                operationId = apiDescription.FriendlyId(),
                // customRouteName = apiDescription.GetSwaggerRouteName(),
                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()
            };

            foreach (var filter in _options.OperationFilters)
            {
                filter.Apply(operation, schemaRegistry, apiDescription);
            }

            return(operation);
        }
        private Operation CreateOperation(ApiDescription apiDescription, SchemaRegistry schemaRegistry)
        {
            Contract.Requires(apiDescription != null);
            Contract.Requires(schemaRegistry != null);
            Contract.Requires(apiDescription.ParameterDescriptions != null);


            var edmModel = ((ODataRoute)apiDescription.Route).GetEdmModel();

            var parameters = apiDescription.ParameterDescriptions
                             .Select(paramDesc =>
            {
                var inPath = apiDescription.RelativePathSansQueryString().Contains("{" + paramDesc.Name + "}");
                var swaggerApiParameterDescription = paramDesc as SwaggerApiParameterDescription;
                return(swaggerApiParameterDescription != null
                    ? CreateParameter(swaggerApiParameterDescription, inPath, schemaRegistry, edmModel)
                    : CreateParameter(paramDesc, inPath, schemaRegistry, edmModel));
            })
                             .ToList();
            var responses    = new Dictionary <string, Response>();
            var responseType = apiDescription.ResponseType();

            if (responseType == null || responseType == typeof(void))
            {
                responses.Add("204", new Response {
                    description = "No Content"
                });
            }
            else
            {
                responses.Add("200", new Response {
                    description = "OK", schema = schemaRegistry.GetOrRegisterResponseType(edmModel, responseType)
                });
            }

            var operation = new Operation
            {
                summary     = apiDescription.Documentation,
                tags        = new[] { _config.GetSwashbuckleOptions().GroupingKeySelector(apiDescription) },
                operationId = apiDescription.OperationId(),
                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()
            };

            foreach (var filter in _config.GetSwashbuckleOptions().OperationFilters)
            {
                Contract.Assume(filter != null);
                filter.Apply(operation, schemaRegistry, apiDescription);
            }

            return(operation);
        }
Beispiel #3
0
        private Operation CreateOperation(ApiDescription apiDesc, SchemaRegistry schemaRegistry, float apiVersion)
        {
            var parameters = apiDesc.ParameterDescriptions
                .Select(paramDesc =>
                {
                    string location = GetParameterLocation(apiDesc, paramDesc);
                    return CreateParameter(location, paramDesc, schemaRegistry);
                })
                 .ToList();

            var responses = new Dictionary<string, Response>();
            var responseType = apiDesc.ResponseType();
            if (responseType == null || responseType == typeof(void))
                responses.Add("204", new Response { description = "No Content" });
            else
                responses.Add("200", new Response { description = "OK", schema = schemaRegistry.GetOrRegister(responseType) });

            var operation = new Operation
            {
                tags = new[] { _options.GroupingKeySelector(apiDesc) },
                operationId = apiDesc.FriendlyId(),
                produces = apiDesc.Produces().ToList(),
                consumes = apiDesc.Consumes().ToList(),
                parameters = parameters.Any() ? parameters : new List<Parameter>(), // parameters can be null but not empty
                responses = responses,
                deprecated = apiDesc.IsObsolete() ? true : (bool?)null
            };
            
            if (apiVersion>2)
            {
                operation.parameters.Insert(0, new Parameter { name = "JWT", @in = "header", description = "Json Web Token", required = false, type = "string" });
            }
            else
            {
                //appInfo控制器排除
                if (apiDesc.ActionDescriptor.ControllerDescriptor.ControllerName!=nameof(Controllers.v1.AppInfoController))
                {
                    operation.parameters.Insert(0, new Parameter { name = "AppKey", @in = "header", description = "客户端标识", required = false, type = "string" });
                    operation.parameters.Insert(1, new Parameter { name = "Sign", @in = "header", description = "签名", required = false, type = "string" });
                }
            }
            

            foreach (var filter in _options.OperationFilters)
            {
                filter.Apply(operation, schemaRegistry, apiDesc);
            }

            return operation;
        }
Beispiel #4
0
        private Operation CreateOperation(ApiDescription apiDesc, SchemaRegistry schemaRegistry)
        {
            var parameters = apiDesc.ParameterDescriptions
                             .Where(paramDesc =>
            {
                var paramDescriptor = paramDesc.ParameterDescriptor;
                return(paramDescriptor == null || paramDescriptor.ParameterType != typeof(CancellationToken));
            })
                             .Select(paramDesc =>
            {
                string location = GetParameterLocation(apiDesc, paramDesc);
                return(CreateParameter(location, paramDesc, schemaRegistry));
            })
                             .ToList();

            var responses    = new Dictionary <string, Response>();
            var responseType = apiDesc.ResponseType();

            if (responseType == null || responseType == typeof(void))
            {
                responses.Add("204", new Response {
                    description = "No Content"
                });
            }
            else
            {
                responses.Add("200", new Response {
                    description = "OK", schema = schemaRegistry.GetOrRegister(responseType)
                });
            }

            var operation = new Operation
            {
                tags        = new[] { _options.GroupingKeySelector(apiDesc) },
                operationId = apiDesc.FriendlyId(),
                produces    = apiDesc.Produces().ToList(),
                consumes    = apiDesc.Consumes().ToList(),
                parameters  = parameters.Any() ? parameters : null, // parameters can be null but not empty
                responses   = responses,
                deprecated  = apiDesc.IsObsolete() ? true : (bool?)null
            };

            foreach (var filter in _options.OperationFilters)
            {
                filter.Apply(operation, schemaRegistry, apiDesc);
            }

            return(operation);
        }
Beispiel #5
0
        private Operation CreateOperation(ApiDescription apiDescription, SchemaRegistry schemaRegistry)
        {
            var parameters = apiDescription.ParameterDescriptions
                             .Select(paramDesc =>
            {
                var inPath = apiDescription.RelativePathSansQueryString().Contains("{" + paramDesc.Name + "}");
                return(CreateParameter(paramDesc, inPath, schemaRegistry));
            })
                             .ToList();

            var responses    = new Dictionary <string, Response>();
            var responseType = apiDescription.ResponseType();

            if (responseType == null)
            {
                responses.Add("204", new Response {
                    description = "No Content"
                });
            }
            else
            {
                responses.Add("200", new Response {
                    description = "OK", schema = schemaRegistry.GetOrRegister(responseType)
                });
            }

            var operation = new Operation
            {
                tags        = new [] { _options.GroupingKeySelector(apiDescription) },
                operationId = apiDescription.FriendlyId(),
                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()
            };

            foreach (var filter in _options.OperationFilters)
            {
                filter.Apply(operation, schemaRegistry, apiDescription);
            }

            return(operation);
        }
Beispiel #6
0
        private Operation CreateOperation(
            ApiDescription apiDesc,
            SchemaRegistry schemaRegistry)
        {
            List <Parameter> list = ((IEnumerable <ApiParameterDescription>)apiDesc.get_ParameterDescriptions()).Select <ApiParameterDescription, Parameter>((Func <ApiParameterDescription, Parameter>)(paramDesc => this.CreateParameter(this.GetParameterLocation(apiDesc, paramDesc), paramDesc, schemaRegistry))).ToList <Parameter>();
            Dictionary <string, Response> dictionary = new Dictionary <string, Response>();
            Type type = apiDesc.ResponseType();

            if (type == (Type)null || type == typeof(void))
            {
                dictionary.Add("204", new Response()
                {
                    description = "No Content"
                });
            }
            else
            {
                dictionary.Add("200", new Response()
                {
                    description = "OK",
                    schema      = schemaRegistry.GetOrRegister(type)
                });
            }
            Operation operation = new Operation()
            {
                tags = (IList <string>) new string[1]
                {
                    this._options.GroupingKeySelector(apiDesc)
                },
                operationId = apiDesc.FriendlyId(),
                produces    = (IList <string>)apiDesc.Produces().ToList <string>(),
                consumes    = (IList <string>)apiDesc.Consumes().ToList <string>(),
                parameters  = list.Any <Parameter>() ? (IList <Parameter>)list : (IList <Parameter>)null,
                responses   = (IDictionary <string, Response>)dictionary,
                deprecated  = apiDesc.IsObsolete() ? new bool?(true) : new bool?()
            };

            foreach (IOperationFilter operationFilter in this._options.OperationFilters)
            {
                operationFilter.Apply(operation, schemaRegistry, apiDesc);
            }
            return(operation);
        }
        private Operation CreateOperation(ApiDescription apiDesc)
        {
            //   Parameter

            var param = apiDesc.ParameterDescriptions.Select(paramDesc =>
            {
                string location = GetParameterLocation(apiDesc, paramDesc);
                return(CreateParameter(location, paramDesc));
            })
                        .ToList();



            var operation = new Operation
            {
                produces    = apiDesc.Produces().ToList(),
                consumes    = apiDesc.Consumes().ToList(),
                operationId = apiDesc.GetFriendlyId(),
                parameters  = param,
                deprecated  = apiDesc.IsObsolete()?true:false
            };

            return(operation);
        }
        private Operation CreateOperation(ApiDescription apiDesc, SchemaRegistry schemaRegistry, HashSet <string> operationNames)
        {
            var parameters = apiDesc.ParameterDescriptions
                             .Select(paramDesc =>
            {
                string location = GetParameterLocation(apiDesc, paramDesc);
                return(CreateParameter(location, paramDesc, schemaRegistry));
            })
                             .ToList();

            var description = apiDesc.ActionDescriptor.GetCustomAttributes <SwaggerDescriptionAttribute>()
                              .FirstOrDefault();

            var responses    = new Dictionary <string, Response>();
            var responseType = apiDesc.ResponseType();

            if (responseType == null || responseType == typeof(void))
            {
                responses.Add("204", new Response {
                    description = "No Content"
                });
            }
            else
            {
                responses.Add("200", new Response {
                    description = "OK", schema = schemaRegistry.GetOrRegister(responseType)
                });
            }

            var operation = new Operation
            {
                tags        = new[] { _options.GroupingKeySelector(apiDesc) },
                operationId = this.GetUniqueOperationId(apiDesc, operationNames),
                description = description?.Description,
                summary     = description?.Summary,
                produces    = apiDesc.Produces().ToList(),
                consumes    = apiDesc.Consumes().ToList(),
                parameters  = parameters.Any() ? parameters : null, // parameters can be null but not empty
                responses   = responses,
            };

            if (apiDesc.IsObsolete())
            {
                operation.deprecated = true;
                var message = apiDesc.ObsoleteMessage();
                if (!string.IsNullOrEmpty(message))
                {
                    if (operation.summary == null)
                    {
                        operation.summary = message;
                    }
                    else if (operation.description == null)
                    {
                        operation.description = message;
                    }
                }
            }

            foreach (var filter in _options.OperationFilters)
            {
                filter.Apply(operation, schemaRegistry, apiDesc);
            }

            return(operation);
        }