Асинхронные ограничения маршрута в ядре ASP.NET - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть некоторые пользовательские ограничения маршрута, которые проверяют маркеры маршрута.

[Route("{locale:locale}", Name = "HomeLocale")]

Например, значение языка (us) должно быть проверено, чтобы убедиться, что это допустимое значение.Список допустимых значений извлекается из API с помощью HTTP-вызова.

Пример кода ниже:

internal sealed class LocaleRouteTokenConstraint : IRouteConstraint
{                
    public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
    {
        if (routeDirection == RouteDirection.UrlGeneration) //Always match when generating Urls
            return true;

        var routeTokenValue = values[routeKey].ToString();            

        //TODO Call API and check values

        return true;
    }       
}

Как лучше всего это сделать?
Мне интересно, как IRouteConstraint не предоставляет async метод, и мне придется ждать завершения задачи (с .Result или .Wait())
Также это, очевидно, будет выполняться при каждом запросе.

1 Ответ

0 голосов
/ 05 декабря 2018

Для Route используется для направления запроса к конкретному действию контроллера.

Как вы знаете, для IRouteConstraint нет асинхронного метода, и вы не должны использовать .Result или .Wait() в IRouteConstraint, что будет стоить много производительности.

Как правило, IRouteConstraint используется для маршрутизации запроса, вы можете проверить tokens в MVC Filter IActionFilter после того, как запрос перенаправит на определенный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...