[asp.net-mvc]扩展 ASP.net HelpPage 家

发布时间: 2017/3/25 0:57:06
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我一直在使用 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/描述) 扩展到第二种观点 (扩展)。

编辑︰我在 ApiGroup.cshtml 和 HelpPageConfigurationExtensions 中放置断点。 cs 和它出现的索引页呈现运行之前将属性添加到 HelpPageApiModel。

解决方法 1:

我不能够使用相同方法添加信息到单个页面控制器,因为索引页呈现之前的 ApiModel 在 HelpPageConfigurationExtensions.cs 中生成。也许是因为他们不想等待几亿万年的索引页后,可以加载。

要变通解决此问题,我的逻辑直接添加到 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 文件坏的做法,因为它可能会减慢加载页面,但这似乎没有任何页面上的效果。

官方微信
官方QQ群
31647020