1

我必须得到一个来自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 对象,而不是我真正想要获得的 Token。作为一种解决方法,我向 Emisor 类添加了一个字符串 Token 属性

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

并以令牌作为属性返回整个 Emisor,这样我就能够获取它并将其存储在本地存储中。但我认为这不是正确的做法,我认为我必须能够获得令牌而不是 Emisor 的一部分

4

1 回答 1

0

为此,我制作了一个扩展方法:

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

于 2018-07-24T05:26:03.143 回答