查找控制器 ActionModel 的 API 个状态代码
Find API Status Codes for Controller ActionModel
改进这个问题,我如何在添加它们之前在 ApplicationModelProvider 中找到 ActionModel 操作的所有现有状态代码?
目前正在调试器中查看 action.Filters[0].StatusCode
,但无法访问实际代码中的 属性。
在添加它之前,需要查看所有 数组 列表中 API 控制器操作已经存在的状态代码。
作为测试进行了过滤[0]
foreach (ControllerModel controller in context.Result.Controllers)
{
foreach (ActionModel action in controller.Actions)
{
Type returnType = action.ActionMethod.ReturnType.GenericTypeArguments[0].GetGenericArguments()[0];
action.Filters.Add(new ProducesResponseTypeAttribute(StatusCodes.Status510NotExtended));
action.Filters.Add(new ProducesResponseTypeAttribute(returnType, StatusCodes.Status200OK));
action.Filters.Add(new ProducesResponseTypeAttribute(returnType, StatusCodes.Status500InternalServerError));
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.TryAddEnumerable(ServiceDescriptor.Transient<IApplicationModelProvider, ProduceResponseTypeModelProvider>());
...
}
首先转换为ProducesResponseTypeAttribute,并获取StatusCode
请参阅下面的代码,
foreach (var filter in action.Filters)
{
if (filter.GetType() == typeof(ProducesResponseTypeAttribute))
{
var producesResponseTypeAttribute = (filter as ProducesResponseTypeAttribute)
var statusCode = producesResponseTypeAttribute.StatusCode;
改进这个问题,我如何在添加它们之前在 ApplicationModelProvider 中找到 ActionModel 操作的所有现有状态代码?
目前正在调试器中查看 action.Filters[0].StatusCode
,但无法访问实际代码中的 属性。
在添加它之前,需要查看所有 数组 列表中 API 控制器操作已经存在的状态代码。
作为测试进行了过滤[0]
foreach (ControllerModel controller in context.Result.Controllers)
{
foreach (ActionModel action in controller.Actions)
{
Type returnType = action.ActionMethod.ReturnType.GenericTypeArguments[0].GetGenericArguments()[0];
action.Filters.Add(new ProducesResponseTypeAttribute(StatusCodes.Status510NotExtended));
action.Filters.Add(new ProducesResponseTypeAttribute(returnType, StatusCodes.Status200OK));
action.Filters.Add(new ProducesResponseTypeAttribute(returnType, StatusCodes.Status500InternalServerError));
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.TryAddEnumerable(ServiceDescriptor.Transient<IApplicationModelProvider, ProduceResponseTypeModelProvider>());
...
}
首先转换为ProducesResponseTypeAttribute,并获取StatusCode 请参阅下面的代码,
foreach (var filter in action.Filters)
{
if (filter.GetType() == typeof(ProducesResponseTypeAttribute))
{
var producesResponseTypeAttribute = (filter as ProducesResponseTypeAttribute)
var statusCode = producesResponseTypeAttribute.StatusCode;