Blazor在登錄或註冊時獲取jwt令牌

blazor

我必須得到一個來自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對象而不是我真正想要獲得的令牌。作為一種解決方法,我向Emisor類添加了一個字符串Token屬性

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

並使用令牌作為Property返回整個Emisor,這樣我就可以獲取它並將其存儲在本地存儲中。但我認為這不是正確的方法,我認為我必須能夠獲得令牌而不必成為Emisor的一部分

一般承認的答案

我為此目的製作了一個擴展方法:

    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使用



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow