AuthenticationHeaderValue Vs NetworkCredential,有什么区别?



注意:这不是这个问题的重复。我已经读过那个问题和答案了

方法1

var client = new HttpClient() { BaseAddress = new Uri("https://myurl") };
var authenticationString = "username:password"; // Obviously this will be actual username & pass
var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(authenticationString));
client.DefaultRequestHeaders.Add("Basic", base64EncodedAuthenticationString);
HttpResponseMessage responseToken = client.GetAsync("/customer/151375").Result;
string data = responseToken.Content.ReadAsStringAsync().Result;

上面的方法不起作用,如果它有帮助,当我检查response.RequestMessage.RequestUri时,它与https://myurl/customer/151375不同。这种方法返回一些HTML。

方法2

HttpClientHandler httpClientHandler = new HttpClientHandler()
{
Credentials = new NetworkCredential("username", "password")
};
var client = new HttpClient(httpClientHandler);
HttpResponseMessage response =
client.GetAsync("https://myurl/customer/151375/contacts").Result;
string data = response.Content.ReadAsStringAsync().Result;

方法2工作,但方法1不工作。对我来说,这两个请求是一样的,但显然它们不是。

以上两种方法的区别是什么?

为什么只有方法2有效?

如果您想要使用Authorization头,您需要正确地命名它。头文件有名称和值。身份验证头具有名称"Authorization"和值取决于要使用的授权类型。你正在使用"基本"。授权方案。授权头值的第一个字是使用的方案名。最常用的可能是"基本";和";Bearer"授权标头。在你的第一种方法中使用这个:

client.DefaultRequestHeaders.Add("Authorization",$"Basic {base64EncodedAuthenticationString}");

最新更新