繁体   English   中英

在标头(REST API)中使用具有用户名和密码的GetAsync

[英]Use GetAsync with username+password in header (REST API)

我需要将UserNamePassword作为标头键传递来获取令牌。 我在Postman中测试了GET方法,并且效果很好。 但是,我无法在C#代码中执行相同的操作,因为我无法将UserNamePassword作为标头键发送。

在我的代码中,我使用了PostAsync (请参见代码),但是由于(result.IsSuccessStatusCode)无论如何始终为false没有用。 所以我想我必须配合GetAsync才能使其正常工作。 但是我不知道如何将UserNamePassword作为标头值传递。

我的LoginVm仅包含UserNamePassword

    public static async Task<Token> Authentication(LoginVm vm) {

        Token token = null;

        string requestJson = JsonConvert.SerializeObject(vm);
        var client = new HttpClient();

        //How to use GetAsync instead?
        var result = client.PostAsync(new Uri("http://x.com/.../login"),
                                      new StringContent(requestJson, Encoding.UTF8, "application/json")).Result;

        if (result.IsSuccessStatusCode) { 
            string json = await result.Content.ReadAsStringAsync();
            if (!string.IsNullOrEmpty(json)) {

                token = JsonConvert.DeserializeObject<Token>(json);
            }
        }
        return token;
    }

感谢所有帮助。

这样的事情应该起作用:

using(var client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", yourCredentials)
    var responseString = await client.GetStringAsync(yourBaseUrl);
}

因为您提到GET工作正常。 然后假设您有一个类似Token的类:

public class Token
{
    public string Duration { get; set; }
    public string Token { get; set; }
}

您可以添加以下行以反序列化响应:

var responseObject = JsonConvert.DeserializeObject<Token>(responseString);

并访问token

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM