我需要类似于CMS的动态路由(控制器/操作),可以说如果用户请求http://blahblah.com/book1/chapter1/lesson34,则在运行时确定控制器或操作。要确定控制器,我需要对用户进行身份验证并获得正确的索赔。
我使用asp.net 3.0端点路由的新功能,创建了一个继承了DynamicRouteValueTransformer的TestControllerTransformer。但是在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);
}
}
我期望用户登录后在TestControllerTransformer中httpContext.User.Identity.IsAuthenticated为true,因此我可以在业务逻辑中使用User-Identity-Claims来在运行时确定控制器/操作。