我一直在使用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之前运行索引页面的呈现。
答案 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文件中添加太多逻辑是一种不好的做法,因为它可能会减慢加载页面的速度,但这似乎对页面没有任何影响。