Devo ottenere la risposta di un token proveniente da un webapi di asp.net che è così
return new JwtSecurityTokenHandler().WriteToken(token);
e dalla pagina di login di Blazor
private async Task LoginEmisor()
{
var response = await http.PostJsonAsync<Emisor>("api/Emisors/Login",emisor);
Storage["token"] = response.Token;
Console.WriteLine(response.Token);
}
E ottengo un errore di serializzazione perché la risposta si aspetta un oggetto Emisor e non il token che in realtà voglio ottenere. Come soluzione alternativa ho aggiunto una proprietà Token stringa alla classe Emisor
emisor.Token = token.ToString();
return emisor;
e restituire l'intero Emisor con il token come Property, e in quel modo sono riuscito a ottenerlo e memorizzarlo nella memoria locale. Ma penso che non sia il modo giusto per farlo, penso di dover essere in grado di ottenere il token senza far parte di Emisor
Ho creato un metodo di estensione per questo scopo:
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();
}
e quindi usarlo in questo modo:
var obj = new { username, password };
var token = await _http.SendJsonAsyncRawResult(HttpMethod.Post, "api/token", obj);
Disponibile anche su nuget