Web API帮助页面 - 自定义属性文档 [英] Web API Help pages - customizing Property documentation

查看:235
本文介绍了Web API帮助页面 - 自定义属性文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我的网络api,我添加了 web api帮助页面自动生成我的文档。对于我的参数列出的方法,这是非常有用的,但我有一个这样的方法:

  public SessionResult PostLogin(CreateSessionCommand request )

而且,在我的帮助页面上,它只在属性部分列出了命令参数。但是,在示例请求部分中,它列出了我的 CreateSessionCommand 类的所有属性。


参数



名称|说明|附加信息



request |没有文档可用。 |在请求正文中定义此参数。


我希望列出我的中的所有属性CreateSessionCommand 类。有没有办法做到这一点?

解决方案

这应该是@Josh答案的补充。如果您不仅要从模型类列出属性,还要包括每个属性的文档,那么应该修改 Areas / HelpPage / XmlDocumentationProvider.cs 文件如下:

  public virtual string GetDocumentation(HttpParameterDescriptor parameterDescriptor)
{
ReflectedHttpParameterDescriptor reflectParameterDescriptor = parameterDescriptor as ReflectedHttpParameterDescriptor;
if(reflectParameterDescriptor!= null)
{
if(reflectParameterDescriptor.ParameterInfo为CustomParameterInfo)
{
const string PropertyExpression =/ doc / members / member [@命名= 'P:{0}'];
var pi =(CustomParameterInfo)reflectParameterDescriptor.ParameterInfo;

string selectExpression = String.Format(CultureInfo.InvariantCulture,PropertyExpression,pi.Prop.DeclaringType.FullName +。+ pi.Prop.Name);
XPathNavigator methodNode = _documentNavigator.SelectSingleNode(selectExpression);
if(methodNode!= null)
{
return methodNode.Value.Trim();
}
}
else
{
XPathNavigator methodNode = GetMethodNode(reflectParameterDescriptor.ActionDescriptor);
if(methodNode!= null)
{
string parameterName = reflectionParameterDescriptor.ParameterInfo.Name;
XPathNavigator parameterNode = methodNode.SelectSingleNode(String.Format(CultureInfo.InvariantCulture,ParameterExpression,parameterName));
if(parameterNode!= null)
{
return parameterNode.Value.Trim();
}
}
}
}

返回null;
}

CustomParameterInfo 类应该保留属性信息:

 内部类CustomParameterInfo:ParameterInfo 
{
public PropertyInfo Prop {get;私人集合

public CustomParameterInfo(PropertyInfo prop)
{
Prop = prop;
base.NameImpl = prop.Name;
}
}


I have my web api and I added the web api help pages to auto-generate my documentation. It's working great for methods where my parameters are listed out, but I have a method like this:

public SessionResult PostLogin(CreateSessionCommand request)

And, on my help page, it is only listing the command parameter in the properties section. However, in the sample request section, it lists out all of the properties of my CreateSessionCommand class.

Parameters

Name | Description | Additional information

request | No documentation available. | Define this parameter in the request body.

I would like it instead to list all of the properties in my CreateSessionCommand class. Is there an easy way to do this?

解决方案

this should go as an addition to @Josh answer. If you want not only to list properties from the model class, but also include documentation for each property, Areas/HelpPage/XmlDocumentationProvider.cs file should be modified as follows:

public virtual string GetDocumentation(HttpParameterDescriptor parameterDescriptor)
{
    ReflectedHttpParameterDescriptor reflectedParameterDescriptor = parameterDescriptor as ReflectedHttpParameterDescriptor;
    if (reflectedParameterDescriptor != null)
    {
        if (reflectedParameterDescriptor.ParameterInfo is CustomParameterInfo)
        {
            const string PropertyExpression = "/doc/members/member[@name='P:{0}']";
            var pi = (CustomParameterInfo) reflectedParameterDescriptor.ParameterInfo;

            string selectExpression = String.Format(CultureInfo.InvariantCulture, PropertyExpression, pi.Prop.DeclaringType.FullName + "." + pi.Prop.Name); 
            XPathNavigator methodNode = _documentNavigator.SelectSingleNode(selectExpression);
            if (methodNode != null)
            {
                return methodNode.Value.Trim();
            }
        }
        else
        {
            XPathNavigator methodNode = GetMethodNode(reflectedParameterDescriptor.ActionDescriptor);
            if (methodNode != null)
            {
                string parameterName = reflectedParameterDescriptor.ParameterInfo.Name;
                XPathNavigator parameterNode = methodNode.SelectSingleNode(String.Format(CultureInfo.InvariantCulture, ParameterExpression, parameterName));
                if (parameterNode != null)
                {
                    return parameterNode.Value.Trim();
                }
            }                    
        }
    }

    return null;
}

and CustomParameterInfo class should keep property info as well:

internal class CustomParameterInfo : ParameterInfo
{
    public PropertyInfo Prop { get; private set; }

    public CustomParameterInfo(PropertyInfo prop)
    {
        Prop = prop;
        base.NameImpl = prop.Name;
    }
}

这篇关于Web API帮助页面 - 自定义属性文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆