Web服务授权标头返回服务中的奇数字符

问题描述 投票:0回答:1

我已经编写了一个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”的事情,这很明显是错误的。谁能告诉我为什么我得到这个输出,而不是与我发送请求的英文字符组成的输入?

c# .net http wcf service
1个回答
0
投票

问题是您将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));

尝试使用其他方式编码字符串

© www.soinside.com 2019 - 2024. All rights reserved.