Ich muss die Antwort eines Tokens von einem asp.net Webapi bekommen, die so ist
return new JwtSecurityTokenHandler().WriteToken(token);
und von der Blazor-Login-Seite
private async Task LoginEmisor()
{
var response = await http.PostJsonAsync<Emisor>("api/Emisors/Login",emisor);
Storage["token"] = response.Token;
Console.WriteLine(response.Token);
}
Und ich bekomme einen Serialisierungsfehler, weil die Antwort ein Emisor-Objekt erwartet und nicht das Token, das ich eigentlich bekommen möchte. Als Workaround habe ich der Emisor-Klasse eine Zeichenketteneigenschaft hinzugefügt
emisor.Token = token.ToString();
return emisor;
und den gesamten Emisor mit dem Token als Property zurückgeben, und auf diese Weise konnte ich ihn holen und im lokalen Speicher speichern. Aber ich denke, das ist nicht der richtige Weg, ich denke, ich muss in der Lage sein, das Token zu bekommen, ohne ein Teil von Emisor zu sein
Ich habe eine Erweiterungsmethode für diesen Zweck gemacht:
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();
}
und dann benutze es so:
var obj = new { username, password };
var token = await _http.SendJsonAsyncRawResult(HttpMethod.Post, "api/token", obj);
Auch verfügbar auf nugget