Мне нужен динамический маршрут (контроллер / действие), аналогичный 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 в моей бизнес-логике для определения контроллера/ действие во время выполнения.