Blazor consigue el token jwt al iniciar sesión o registrarte

blazor

Pregunta

Tengo que obtener la respuesta de un token procedente de asp.net webapi que es así

return new JwtSecurityTokenHandler().WriteToken(token);

y desde la página de inicio de sesión de Blazor

    private async Task LoginEmisor()
{
    var response = await http.PostJsonAsync<Emisor>("api/Emisors/Login",emisor);
    Storage["token"] = response.Token;
    Console.WriteLine(response.Token);
}

Y recibo un error de serialización porque la respuesta está esperando un objeto Emisor y no el token que realmente quiero obtener. Como solución, agregué una propiedad Token de cadena a la clase Emisor

            emisor.Token = token.ToString();
            return emisor;

y devolver todo el Emisor con el token como propiedad, y de esa manera pude obtenerlo y almacenarlo en el almacenamiento local. Pero creo que no es la forma correcta de hacerlo, creo que tengo que poder obtener el token sin ser parte de Emisor

Respuesta aceptada

He hecho un método de extinción para este propósito:

    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();

    }

y luego usarlo así:

        var obj = new { username, password };
        var token = await _http.SendJsonAsyncRawResult(HttpMethod.Post, "api/token", obj);

También disponible en nuget



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow