[英]Use GetAsync with username+password in header (REST API)
我需要将UserName
和Password
作为标头键传递来获取令牌。 我在Postman中测试了GET
方法,并且效果很好。 但是,我无法在C#代码中执行相同的操作,因为我无法将UserName
和Password
作为标头键发送。
在我的代码中,我使用了PostAsync
(请参见代码),但是由于(result.IsSuccessStatusCode)
无论如何始终为false
没有用。 所以我想我必须配合GetAsync
才能使其正常工作。 但是我不知道如何将UserName
和Password
作为标头值传递。
我的LoginVm
仅包含UserName
和Password
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.