Страницы Razor получают атрибуты класса в модульных тестах - PullRequest
0 голосов
/ 06 мая 2019

В настоящее время я пытаюсь проверить, есть ли способ получить имена классов всех атрибутов в классах страниц бритвы.Я тестирую все мои контроллеры на предмет поиска AuthorizeFilter, чтобы забыть его

В настоящее время я делаю это через MVC (не работает в Razor Pages):

var values = actionDescriptorCollectionProvider
.ActionDescriptors
.Items
.OfType<ControllerActionDescriptor>()
.Select(a => new
{
    a.DisplayName,
    a.ControllerName,
    a.ActionName,
    AttributeRouteTemplate = a.AttributeRouteInfo?.Template,
    HttpMethods = string.Join(", ", a.ActionConstraints?.OfType<HttpMethodActionConstraint>().SingleOrDefault()?.HttpMethods ?? new string[] { "any" }),
    Parameters = a.Parameters?.Select(p => new
    {
        Type = p.ParameterType.Name,
        p.Name
    }),
    ControllerClassName = a.ControllerTypeInfo.FullName,
    ActionMethodName = a.MethodInfo.Name,
    Filters = a.FilterDescriptors?.Select(f => new
    {
        ClassName = f.Filter.GetType().FullName,
        f.Scope //10 = Global, 20 = Controller, 30 = Action
    }),
    Constraints = a.ActionConstraints?.Select(c => new
    {
        Type = c.GetType().Name
    }),
    RouteValues = a.RouteValues.Select(r => new
    {
        r.Key,
        r.Value
    }),
});

Проблема в том, что этот код не будет работать с Razor Pages, т.е. FilterDescriptors пуст для PageActionDescriptor.

1 Ответ

0 голосов
/ 07 мая 2019

Вам нужно использовать PageActionDescriptor для RazorPages вместо ControllerActionDescriptor:

var values = actionDescriptorCollectionProvider
.ActionDescriptors
.Items
.OfType<PageActionDescriptor>()
.Select(descriptor => new
{
    // descriptor...,
    // ... 
});
...