Blazor erhalten jwt Token auf anmelden oder registrieren

blazor

Frage

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

Akzeptierte Antwort

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



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum