在IOperationFilter

时间:2016-11-21 16:11:20

标签: swagger swagger-2.0 swashbuckle

我正在使用Swashbuckle进行 APIDocumentation 。我已经通过自己跟随Link (DefaultValue属性)和一个属性(swaggerIgnore)来制作自定义属性。 DefaultValue 工作正常,但其他自定义属性找到节点并给我我设置的属性,但我在其中编辑的架构和我手动删除其中的任何属性的属性无法更新并显示我用户界面中的所有功能。

这是我的示例代码。

public class SwaggerIgnore : Attribute
{
    public string Name { get; set; }
}
 public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        if (operation.parameters == null)
            return;
        IDictionary<string, object> parameterValuePairs = GetParameterValuePairs(apiDescription.ActionDescriptor);
        var retVal = GetParameters(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];
                    }
  

删除代码从这里开始......

foreach (var item in schemaRegistry.Definitions[schemaName].properties)
            {
            if (retVal != null && item.Key == retVal)
         {
         schemaRegistry.Definitions[schemaName].properties.Remove(item);
                    break;
                }
            }
  

删除代码在此处结束..

           }

            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;
    }

使用自定义属性。

[SwaggerDefaultValue("uzair")]
    public String StudentName { set; get; }
[SwaggerIgnore]
    public String FatherName { set; get; }

0 个答案:

没有答案