查找控制器ActionModel的API状态代码 [英] Find API Status Codes for Controller ActionModel
问题描述
对此问题进行改进,在添加它们之前,如何在ApplicationModelProvider中找到ActionModel操作的所有现有状态代码?
Improving upon this question, how do I Find All the Existing Status Codes for ActionModel action in ApplicationModelProvider, before adding them?
当前正在浏览 action.Filters [0] .StatusCode
,但是无法在实际代码中访问该属性。
在添加之前需要查看所有 array 列表中API Controller Actions的状态代码已经存在。
Currently looking through action.Filters[0].StatusCode
in debugger, however cannot access the property in actual code.
Need to see what Status codes already exist for API Controller Actions in all array list, before adding it .
did过滤器[ 0]作为测试
did filters[0] as a test
Net Core API:使ProducesResponseType全局参数或自动化
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
参见下面的代码,
First cast as ProducesResponseTypeAttribute, and get StatusCode See code below,
foreach (var filter in action.Filters)
{
if (filter.GetType() == typeof(ProducesResponseTypeAttribute))
{
var producesResponseTypeAttribute = (filter as ProducesResponseTypeAttribute)
var statusCode = producesResponseTypeAttribute.StatusCode;
这篇关于查找控制器ActionModel的API状态代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!