diff --git a/Swashbuckle.Core/Swagger/SwaggerGenerator.cs b/Swashbuckle.Core/Swagger/SwaggerGenerator.cs index 471fef796..a92294630 100644 --- a/Swashbuckle.Core/Swagger/SwaggerGenerator.cs +++ b/Swashbuckle.Core/Swagger/SwaggerGenerator.cs @@ -188,14 +188,18 @@ private Parameter CreateParameter(string location, ApiParameterDescription param } parameter.required = location == "path" || !paramDesc.ParameterDescriptor.IsOptional; - parameter.@default = paramDesc.ParameterDescriptor.DefaultValue; + parameter.description = paramDesc.Documentation; var schema = schemaRegistry.GetOrRegister(paramDesc.ParameterDescriptor.ParameterType); + if (parameter.@in == "body") parameter.schema = schema; else parameter.PopulateFrom(schema); + if (paramDesc.ParameterDescriptor.DefaultValue != null) + parameter.@default = paramDesc.ParameterDescriptor.DefaultValue; + return parameter; } } diff --git a/Swashbuckle.Core/Swagger/XmlComments/ApplyXmlActionComments.cs b/Swashbuckle.Core/Swagger/XmlComments/ApplyXmlActionComments.cs index eb9d812bb..72fc52b14 100644 --- a/Swashbuckle.Core/Swagger/XmlComments/ApplyXmlActionComments.cs +++ b/Swashbuckle.Core/Swagger/XmlComments/ApplyXmlActionComments.cs @@ -69,8 +69,14 @@ private static void ApplyParamComments(Operation operation, XPathNavigator metho if (actionParameter == null) continue; var paramNode = methodNode.SelectSingleNode(string.Format(ParamXPath, actionParameter.Name)); + if (paramNode != null) - parameter.description = paramNode.ExtractContent(); + { + var description = paramNode.ExtractContent(); + + if (!string.IsNullOrEmpty(description)) + parameter.description = description; + } } } diff --git a/Swashbuckle.Dummy.Core/Controllers/XmlAnnotatedController.cs b/Swashbuckle.Dummy.Core/Controllers/XmlAnnotatedController.cs index f576032c4..8184428c5 100644 --- a/Swashbuckle.Dummy.Core/Controllers/XmlAnnotatedController.cs +++ b/Swashbuckle.Dummy.Core/Controllers/XmlAnnotatedController.cs @@ -87,6 +87,13 @@ public void UpdateMetadata(int id, KeyValuePair[] metadata) { throw new NotImplementedException(); } + + [HttpGet] + [Route("GetById")] + public void GetById(string id = "123456") + { + throw new NotImplementedException(); + } } public class Page diff --git a/Swashbuckle.Tests/Swagger/XmlCommentsTests.cs b/Swashbuckle.Tests/Swagger/XmlCommentsTests.cs index 391eeb78e..84a99f7e9 100644 --- a/Swashbuckle.Tests/Swagger/XmlCommentsTests.cs +++ b/Swashbuckle.Tests/Swagger/XmlCommentsTests.cs @@ -224,6 +224,21 @@ public void It_does_not_clear_previously_added_responses() Assert.IsNotNull(responsesProperty["500"]); } + [Test] + public void It_documents_schema_default_parameters() + { + var swagger = GetContent( "http://tempuri.org/swagger/docs/v1" ); + + var parameters = swagger["paths"]["/xmlannotated/GetById"]["get"]["parameters"]; + Assert.IsNotNull( parameters ); + + Assert.IsNotNull( parameters.First["required"] ); + Assert.AreEqual( "False", parameters.First["required"].ToString() ); + + Assert.IsNotNull( parameters.First["default"] ); + Assert.AreEqual( "123456", parameters.First["default"].ToString() ); + } + private void IncludeXmlComments(SwaggerDocsConfig config) { config.IncludeXmlComments(String.Format(@"{0}\XmlComments.xml", AppDomain.CurrentDomain.BaseDirectory));