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

Другие вопросы по тегам