问题
Improving upon this question, how do I Find All the Existing Status Codes for ActionModel action in ApplicationModelProvider, before adding them?
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 filters[0] as a test
Net Core API: Make ProducesResponseType Global Parameter or Automate
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>());
...
}
回答1:
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;
来源:https://stackoverflow.com/questions/59671768/find-api-status-codes-for-controller-actionmodel