Пользователь владеет многими магазинами в моей системе.
После входа в систему пользователь может выбрать определенный магазин, которым он хочет управлять.
Итак, я добавляю претензию с именем 'LoginShop' в UserClaims.
Когда пользователь выбираетЧтобы управлять магазином, мне нужно обновить значение претензии до выбранного идентификатора магазина, а затем повторно войти в систему.
Я использую идентификатор ядра .net и serveridentity4 в качестве сервера, а mvc .net core в качестве сервераклиент.
Итак, у меня есть действие на сервере, чтобы справиться с этим.
[HttpPut]
public async Task<IActionResult> UpdateShopClaim(int id)
{
if (id <= 0)
{
return Ok(new ServiceBaseResponse(0, "shop id not found", null));
}
var user = await _userManager.GetUserAsync(User);
var claims = await _userManager.GetClaimsAsync(user);
var shop = claims.FirstOrDefault(c => c.Type == "LoginShop");
if (shop == null)
{
await _userManager.AddClaimAsync(user, new Claim("LoginShop", id.ToString()));
}
else
{
await _userManager.ReplaceClaimAsync(user, shop, new Claim("LoginShop", id.ToString()));
}
return Ok(new ServiceBaseResponse(1, "ok", null));
}
, а код клиента
public async Task<ServiceResponseBase> SelectShop(ApplicationUser user, int shopId)
{
try
{
HttpContent httpContent = new StringContent("{\"id\":" + shopId + "}");
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var uri = API.Shop.SelectShop(_remoteIdentityUrl, shopId);
HttpRequestMessage request=new HttpRequestMessage();
request.Method = HttpMethod.Put;
request.RequestUri = new Uri(uri);
request.Content = httpContent;
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var qa = JsonConvert.DeserializeObject<ServiceResponseBase>(await response.Content.ReadAsStringAsync());
return qa;
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
Я всегда получаю нулевое значениеControllerBase.User на сервере.
Что-то не так со мной?