Blazor получить JWT токен при входе или регистрации
Я должен получить ответ токена от asp.net webapi, который выглядит следующим образом
return new JwtSecurityTokenHandler().WriteToken(token);
и со страницы входа в Blazor
private async Task LoginEmisor()
{
var response = await http.PostJsonAsync<Emisor>("api/Emisors/Login",emisor);
Storage["token"] = response.Token;
Console.WriteLine(response.Token);
}
И я получаю ошибку сериализации, потому что в ответе ожидается объект Emisor, а не токен, который я на самом деле хочу получить. В качестве обходного пути я добавил свойство Token строки в класс Emisor
emisor.Token = token.ToString();
return emisor;
и вернуть весь Emisor с токеном как Property, и таким образом я смог получить его и сохранить в локальном хранилище. Но я думаю, что это неправильный способ сделать это, я думаю, что я должен иметь возможность получить токен, не будучи частью Эмисора.
1 ответ
Решение
Я сделал метод расширения для этой цели:
public static async Task<string> SendJsonAsyncRawResult(this HttpClient httpClient, HttpMethod httpMethod, string requestUri, object content)
{
var requestJson = JsonUtil.Serialize(content);
var response = await httpClient.SendAsync(new HttpRequestMessage(httpMethod, requestUri)
{
Content = new StringContent(requestJson, Encoding.UTF8, "application/json")
});
return await response.Content.ReadAsStringAsync();
}
и затем используйте это так:
var obj = new { username, password };
var token = await _http.SendJsonAsyncRawResult(HttpMethod.Post, "api/token", obj);
Также доступно на nuget