Я пытаюсь найти глагол Http (Get, Post, Push, Delete и т. Д.) Каждого действия метода API контроллера.Предыстория: попытка создать документацию кода состояния ProducesResponseType для Swagger, просмотрев действие http (у компании есть бизнес-правила, связывающие действие с требуемым StatusCode ProducesResponseType).
Так как найти глагол действия HTTP контроллера?
Кажется, это близко к отладке, однако, это кажется неправильным.
foreach (ControllerModel controller in context.Result.Controllers)
{
foreach (ActionModel action in controller.Actions)
controller.Actions.[0].ActionMethod.CustomAttributes[2]
Код ссылки:
Net Core API: сделать глобальный параметр ProducesResponseType или автоматизировать
ProduceResponseTypeModelProvider.cs
public class ProduceResponseTypeModelProvider : IApplicationModelProvider
{
public int Order => 3;
public void OnProvidersExecuted(ApplicationModelProviderContext context)
{
}
public void OnProvidersExecuting(ApplicationModelProviderContext context)
{
foreach (ControllerModel controller in context.Result.Controllers)
{
foreach (ActionModel action in controller.Actions)
{
// I assume that all you actions type are Task<ActionResult<ReturnType>>
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>());
...
}
Есть ли более простой метод для определения глагола действия метода контроллера?
Вопросы ниже относятся к предыдущему .Net.У нас есть .Net Core 2.2.
Как получить атрибут глагола http действия с использованием рефлексии - ASP.NET Web API
Определить, является ли действиеметод POST или GET
Это были обычные ответы .Net
Ответы до:
var methodInfo = MethodBase.GetCurrentMethod();
var attribute = methodInfo.GetCustomAttributes(typeof(ActionMethodSelectorAttribute), true).Cast<ActionMethodSelectorAttribute>().FirstOrDefault();
if (HttpContext.Request.HttpMethod == HttpMethod.Post.Method)
{
// The action is a post
}