扩展ASP.net HelpPage主页

时间:2015-06-18 15:56:35

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

我一直在使用ASP.net HelpPages为我的ApiControllers生成文档。现在,帮助页面的索引显示了控制器的名称/路径以及控制器的描述。

CONTROLLER NAME
------------------------------------------------------------
Api                           Description
------------------------------------------------------------
GET  api/Admin/Users          Some vague description here.
POST api/Admin/Users          Another vague description here.

我想在索引屏幕上显示有关控制器的更多信息。

CONTROLLER NAME
--------------------------------------------------------------------
Api                    Description          Permissions      Field2
---------------------------------------------------------------------
GET  api/Admin/Users   Description here.    Admin            48
POST api/Admin/Users   Description here.    Regular          92

简而言之,我想将视图从第一个视图(只是api / description)扩展到第二个视图(扩展)。

编辑:我在ApiGroup.cshtml和HelpPageConfigurationExtensions中添加了断点。 cs,似乎在将属性添加到HelpPageApiModel之前运行索引页面的呈现。

1 个答案:

答案 0 :(得分:1)

我无法使用与用于向控制器的各个页面添加信息相同的方法,因为索引页面是在HelpPageConfigurationExtensions.cs中生成ApiModel之前呈现的。可能是因为他们不想等待几个月来加载索引页面。

要解决此问题,我将逻辑直接添加到ApiGroup.cshtml文件中。我想要包含在索引页面上的其他参数是从可以通过ApiDescription对象访问的属性派生的。

这看起来像:

(的 ApiGroup.cshtml

@foreach (var api in Model)
{
    <tr>
        <td class="api-name"><a href="@Url.Action("Api", "Help", new {apiId = api.GetFriendlyId()})">@api.HttpMethod.Method @api.RelativePath</a></td>
        <td class="api-documentation">
        @if (api.Documentation != null)
        {
            <p>@api.Documentation</p>
        }
        else
        {
            <p>No documentation available.</p>
        }
        </td>
        <td class="api-Type1">
            @DisplayType1Information(api)
        </td>
        <td class="api-Type2">
            @DisplayType2Information(api)
        </td>
    </tr>
}

以下是我的一个助手的示例,其中包含displayType1信息的逻辑:

@helper DisplayType1Information(ApiDescription api)
{
    string typeOfType1 = "None";
    Type1 attribute =
        api.ActionDescriptor.GetCustomAttributes<Type1Attribute>().FirstOrDefault();
    if (attribute != null)
    {
        enum enumType = attribute.enumOfType1;
        typeOfType1 = enumType.ToString();
    }
    <p>@typeOfType1</p>
}

我想在.cshtml文件中添加太多逻辑是一种不好的做法,因为它可能会减慢加载页面的速度,但这似乎对页面没有任何影响。