ユーザーが使用する言語を決定するカスタム クレームがあります。
そのクレームをチェックし、適切なカルチャを生成する 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 も実装しましたが、どちらも正常に動作します。上記の拡張機能に基づいて Thread.CurrentCulture を設定できる WCF パイプラインの適切なポイントを見つけることができないという事実を除いて、実際にはソリューション全体が正常に機能します。
ICallContextInitializer、IDispatchMessageInspector を試しましたが、上記のいずれも私の ClaimsPrincipal を実際に見ることができません (空のプリンシパルでオーバーライドされます)。ただし、私のサービス操作では、ClaimsPrincipal.Current は、UserNameSecurityTokenHandler で作成した ID を適切に指しています。
この Claim-dependent カルチャはどこに設定すればよいですか?