我已经编写了一个WPF应用程序,该应用程序将POST WebHTTPRequest发送到WCF服务。该服务需要Windows凭据才能在服务器上执行操作。服务收到HTTP请求时,无法解析Authorization标头。
POST请求以这种方式开始。
HttpWebRequest req = WebRequest.CreateHttp(url);
req.ContentType = "application/json;charset=UTF-8";
req.Accept = "application/json";
req.Headers.Add("Authorization", Base64Encode(Details.username + ":" + Details.password + ":" + Details.domain));
req.Method = "POST";
byte[] reqBytes = Encoding.ASCII.GetBytes(body.ToString());
并且在这样的服务上收到
IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
WebHeaderCollection headers = request.Headers;
if (headers["Authorization"] != null)
{
cred = headers["Authorization"];
} else
{
HttpContext.Current.Response.Write(result);
return;
}
我将“ cred”变量打印到日志文件中,然后开始类似“ this”的事情,这很明显是错误的。谁能告诉我为什么我得到这个输出,而不是与我发送请求的英文字符组成的输入?
问题是您将UTF-8编码的字符串编码为Base64。您在此处指定JSON文件的字符集类型为UTF-8:
req.ContentType = "application/json;charset=UTF-8";
因此,当您尝试将身份验证编码为Base64时,它将破坏您的字符串。
req.Headers.Add("Authorization", Base64Encode(Details.username + ":" + Details.password + ":" + Details.domain));
尝试使用其他方式编码字符串