我有一个自定义声明,可以确定用户将使用的语言。
我有对 ClaimsPrincipal 的扩展,它检查该声明并生成适当的文化:
public static CultureInfo Culture(this ClaimsPrincipal principal)
{
Claim claim = principal.FindFirst(CustomClaimTypes.Language);
if (claim == null)
return CultureInfo.CreateSpecificCulture("en");
else
return CultureInfo.CreateSpecificCulture(claim.Value);
}
我还实现了自定义 UserNameSecurityTokenHandler 和自定义 ClaimsAuthorizationManager 并且都可以正常工作。实际上整个解决方案工作得很好,除了我无法在 WCF 管道中找到合适的点,我可以根据上面的扩展设置 Thread.CurrentCulture。
我已经尝试过 ICallContextInitializer、IDispatchMessageInspector,但以上都不能真正看到我的 ClaimsPrincipal(它被空主体覆盖)。但是,在我的服务操作中,ClaimsPrincipal.Current 正确指向我在 UserNameSecurityTokenHandler 中创建的身份。
我应该在哪里设置这种依赖于声明的文化?