Идентификация пользователя в DynamicRouteValueTransformer - PullRequest
0 голосов
/ 19 сентября 2019

Мне нужен динамический маршрут (контроллер / действие), аналогичный CMS, скажем, если пользователь запросил http://blahblah.com/book1/chapter1/lesson34, тогда контроллер или действие будет определено во время выполнения.Чтобы выбрать контроллер, который мне нужен, пользователь прошел аутентификацию и получил правильные претензии.

Я использовал новую функцию маршрутизации конечной точки asp.net 3.0, создав TestControllerTransformer, унаследованный от DynamicRouteValueTransformer.Но в TestControllerTransformer я не могу получить Идентификацию пользователя, впоследствии на контроллере Идентификация пользователя доступна.Это по замыслу?

public class TestControllerTransformer : DynamicRouteValueTransformer
    {
        private ILogger<TestControllerTransformer> _logger;

        public TestControllerTransformer(ILogger<TestControllerTransformer> logger)
        {
            _logger = logger;
        }

        public override ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
        {
            var controller = "Home";
            var action = "Index";

            if (values == null)
                values = new RouteValueDictionary();


            values["controller"] = controller;
            values["action"] = action;


            if (httpContext.User.Identity.IsAuthenticated)
            {
                _logger.LogTrace("User Authenicated"); //Never reaches to this line
            }
            else
            {
                _logger.LogTrace("User NOT Authenicated");
            }


            return new ValueTask<RouteValueDictionary>(values);
        }
    }

Я ожидаю, что httpContext.User.Identity.IsAuthenticated будет истинным в TestControllerTransformer после входа в систему, поэтому я могу использовать утверждения User-Identity-Claims в моей бизнес-логике для определения контроллера/ действие во время выполнения.

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