扩展 ASP.net 帮助页面主页

本文关键字:主页 帮助 ASP net 扩展 | 更新日期: 2023-09-27 17:57:10

我一直在使用 ASP.net 帮助页面为我的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,并且索引页的呈现似乎在将属性添加到帮助页 ApiModel 之前运行。

扩展 ASP.net 帮助页面主页

我无法使用与将信息添加到控制器的各个页面相同的方法,因为索引页面是在 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 文件中添加太多逻辑是一种不好的做法,因为它可能会减慢页面的加载速度,但这似乎对页面没有任何影响。