Asp.net-Web-Api
Swashbuckle (Swagger) 中的預設模型範例
我正在執行 ASP WebAPI 2 並成功安裝了 Swashbuckle。我試圖弄清楚如何定義預設模式值是什麼?
例如,在 Swagger 現場展示網站上,他們將 pet 的預設值更改為“doggie”。他們還定義了狀態的允許值。(現場展示)
![]()
好吧,vgaspar.trivix 的程式碼對我來說並沒有完全工作,沒有為模式設置預設值。我也有一個
NullPointerException. 我設法通過編輯Apply方法使其按預期工作並像這樣操作 schemaRegistry:public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { if (operation.parameters == null) return; IDictionary<string, object> parameterValuePairs = GetParameterValuePairs(apiDescription.ActionDescriptor); foreach (var param in operation.parameters) { if (param.schema != null && param.schema.@ref != null) { string schemaName = param.schema.@ref.Split('/').LastOrDefault(); if (schemaRegistry.Definitions.ContainsKey(schemaName)) foreach (var props in schemaRegistry.Definitions[schemaName].properties) { if (parameterValuePairs.ContainsKey(props.Key)) props.Value.@default = parameterValuePairs[props.Key]; } } var parameterValuePair = parameterValuePairs.FirstOrDefault(p => p.Key.IndexOf(param.name, StringComparison.InvariantCultureIgnoreCase) >= 0); param.@default = parameterValuePair.Value; } }
我設法通過遵循此連結上的內容來完成這項工作:
<https://github.com/domaindrivendev/Swashbuckle/issues/69#issuecomment-53953785>
簡而言之,這是需要做的:
- 如鍊接中所述,創建類 SwaggerDefaultValue 和 AddDefaultValues。我做的一些改變:
public class SwaggerDefaultValue : Attribute { public string Name { get; set; } public string Value { get; set; } public SwaggerDefaultValue(string value) { this.Value = value; } public SwaggerDefaultValue(string name, string value) : this(value) { this.Name = name; } } public class AddDefaultValues : IOperationFilter { public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { IDictionary<string, object> parameterValuePairs = GetParameterValuePairs(apiDescription.ActionDescriptor); foreach (var param in operation.parameters) { var parameterValuePair = parameterValuePairs.FirstOrDefault(p => p.Key.IndexOf(param.name, StringComparison.InvariantCultureIgnoreCase) >= 0); param.@default = parameterValuePair.Value; } } private IDictionary<string, object> GetParameterValuePairs(HttpActionDescriptor actionDescriptor) { IDictionary<string, object> parameterValuePairs = new Dictionary<string, object>(); foreach (SwaggerDefaultValue defaultValue in actionDescriptor.GetCustomAttributes<SwaggerDefaultValue>()) { parameterValuePairs.Add(defaultValue.Name, defaultValue.Value); } foreach (var parameter in actionDescriptor.GetParameters()) { if (!parameter.ParameterType.IsPrimitive) { foreach (PropertyInfo property in parameter.ParameterType.GetProperties()) { var defaultValue = GetDefaultValue(property); if (defaultValue != null) { parameterValuePairs.Add(property.Name, defaultValue); } } } } return parameterValuePairs; } private static object GetDefaultValue(PropertyInfo property) { var customAttribute = property.GetCustomAttributes<SwaggerDefaultValue>().FirstOrDefault(); if (customAttribute != null) { return customAttribute.Value; } return null; } }
- 編輯您的 SwaggerConfig 並將 AddDefaultValues 類添加到 OperationFilters:
GlobalConfiguration.Configuration .EnableSwagger(c => { ... c.OperationFilter<AddDefaultValues>() ... });現在對於我想要預設值的參數,我只需添加以下內容:blic IHttpActionResult Put([FromBody]Pet pet) . turn Ok(); blic class Pet { waggerDefaultValue("doggie")] blic string Name { get; set; } waggerDefaultValue("available")] blic string Status; .
