VS为WebAPI生成帮助页面,属性文档

时间:2016-07-23 23:36:22

标签: c# asp.net asp.net-web-api

我正在为Web API应用程序使用Visual Studio 2013自动生成的XML文档,并且它运行良好,除了具有从List<>继承的业务对象的属性;我从他们那里得到的是"对象的集合。"

例如,这是一个包含OrderLineCollection属性的Order对象:

public class Order 
{
    public OrderLineCollection Lines { get; set; }
}

public class OrderLine
{
    public string OrderNo { get; set; }
}

public class OrderLineCollection : List<OrderLine>
{
    public void ReadFromServer(string orderNo)
    {}
}

为Order对象生成的文档只有&#34; Object of Object&#34;在Lines属性的Type列中,没有指向OrderLine对象的链接。

如果我改为像这样定义Lines属性,它可以工作(=我得到&#34; OrderLine的集合&#34;在Type列中,OrderLine是超链接的):

public class Order 
{
    public List<OrderLine> Lines { get; set; }
}

但是,我希望能够使用上面的OrderLineCollection类,以便我可以在那里保留我的集合特定逻辑。我只需要XML文档来说&#34; OrderLine的集合(超链接)&#34;对于Lines属性。

是否有一种简单的方法可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

在Web API项目中,打开负责生成帮助页面模型类型名称的类的代码文件:

  

{MyProject的} /地区/ HelpPage / ModelDescriptions /的 ModelDescriptionGenerator.cs

转到方法:

public ModelDescription GetOrCreateModelDescription(Type modelType)

然后在方法中输入以下代码:

if (modelType.IsEnum)
{
    return GenerateEnumTypeModelDescription(modelType);
}

然后在其后面输入以下代码

// Force Web API to generate help page model type names like "Collection of {MyType}" instead of "Collection of Object".
if (!modelType.IsGenericType                                // Model type must not be a generic type.
    && modelType.BaseType != null                           // Model type must have a base type (i.e. the model type is a derived type).
    && modelType.BaseType.IsGenericType                     // Model type base type must be a generic type.
    && typeof(IList).IsAssignableFrom(modelType.BaseType))  // Model type base type must implement the IList interface (you can replace "IList" with "IEnumerable" to handle more general collection types).
{
    // Set the model type variable to the model type base type and the rest of the method will know what to do.
    modelType = modelType.BaseType;

}

我希望这有帮助!