我制作 asp.net web api 项目。
客户端程序是winform使用HttpClient。
当用户登录时,我将用户语言分配给声明。
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
.......
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("UserId", context.UserName));
identity.AddClaim(new Claim("role", "user"));
identity.AddClaim(new Claim("Language", forms["language"]));
context.Validated(identity);
......
}
Run Code Online (Sandbox Code Playgroud)
我需要更改索赔运行时的语言。所以我做了更改语言API。
[HttpGet]
[APIAuthorize]
public HttpResponseMessage ChangeLanguage(Language language)
{
User.AddUpdateClaim("Language", language.ToString());
return Request.CreateResponse<IResult>(HttpStatusCode.OK, "OK");
}
Run Code Online (Sandbox Code Playgroud)
并进行 ClaimsIdentity 扩展。
public static class ClaimsIdentityExtensions
{
public static void AddUpdateClaim(this IPrincipal currentPrincipal, string key, string value)
{
var identity = new ClaimsIdentity(currentPrincipal.Identity);
// check for existing claim and remove it
var existingClaim …Run Code Online (Sandbox Code Playgroud) c# asp.net claims-based-identity asp.net-web-api asp.net-web-api2