繁体   English   中英

HTTP 中的基本身份验证发布请求

[英]Basic authentication in HTTP Post request

我正在编写一个简单的 HTTP 发布请求,它将向服务器发送一些数据。

代码片段:

HttpClient client = new HttpClient(); 
var name = _context.Users.FirstOrDefault(u => u.Id == UserId.FirstName) 
var surname = _context.Users.FirstOrDefault(s => s.Id == UserId.LastName) 
var message = new Message 
{
  FirstName = message.FirstName
  LastName = message.LastName
}
var authenticationString = $"{name}:{surname}";
var base64EncodedAuthenticationString= 
Convert.ToBase64String(System.Text.ASCIIEncoding.UTF8.GetBytes(authenticationString));
var content = new StringContent(message.ToString() ?? String.Empty, Encoding.UTF8);
content.Headers.Add("Authorization", "Basic" + base64EncodedAuthenticationString);
var response = await client.PostAsync("https://mywebsite.com", content); 
var responseString = await response.Content.ReadAsStringAsync(); 

当我调试这个代码片段时,我得到异常错误,它说:

“滥用 header 名称,‘授权’。确保请求标头与 HttpRequestMessage 一起使用,响应标头与 HttpResponseMessage 一起使用,内容标头与 HttpContent 对象一起使用。”

如何解决? 如果没有基本身份验证,我会从服务获得响应 401(未经授权),但我需要获取代码 200(好的),如果没有基本身份验证,我将无法实现。

代码中有两个问题:

  • Basic和凭据之间应该有一个空格。
  • 该代码使用内容头来传输Authorization header; 这应该移动到请求标头,例如通过使用DefaultRequestHeaders属性来代替:
client.DefaultRequestHeaders.Add(
  "Authorization", 
  "Basic " + base64EncodedAuthenticationString);

在基本身份验证中,您需要在Basic和身份验证字符串之间留一个空格。 所以它将是content.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);

暂无
暂无

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

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