1

我正在尝试使用他们修改后的基本身份验证版本与 bit.ly 的 REST API 进行通信。但是,为了使其正常工作,HttpWebRequest 需要在第一个请求上附加凭据,但是,HttpWebRequest 不会在第一个请求上发送凭据,并且会在发送任何凭据之前等待 401,即使 PreAuthenticate 设置为 true(使用 PreAuthenticate 它将为所有后续请求发送凭据)。

我尝试了以下方法来让 HttpWebRequest 以 bit.ly 要求的方式工作:

(1) 以http://username:password@api.bi.ly/method格式发送请求。

bit.ly 不支持(因为这是基本身份验证的假实现,他们只检查标头)。

(2) 手动将“Authorization”标头注入HttpWebRequest。

在 .Net CF 中不可能,因为 Authorization 标头受到保护,并且任何修改受保护标头值的尝试都会失败并引发 ArgumentException。

(3) 继承另一个类中的HttpWebRequest 或WebRequest 以实现所需的行为。

不可能,因为 HttpWebRequest 类默认注册为 HTTP 和 HTTPS 方案的请求服务。尝试为这些方案注册不同的 WebRequest 后代将失败,因为不允许使用重复的前缀。

所以有人有什么建议吗?

4

1 回答 1

1

关于 (2) 的注释。我使用http://blog.kowalczyk.info/article/Forcing-basic-http-authentication-for-HttpWebReq.html中描述的方法来注入授权标头,它在 .NET CF 2.0 中运行良好。

public void SetBasicAuthHeader(WebRequest req, String userName, String userPassword)
{
    string authInfo = userName + ":" + userPassword;
    authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
    req.Headers["Authorization"] = "Basic " + authInfo;
}
于 2010-07-06T08:49:54.577 回答