1

基本認証の修正バージョンを使用して、bit.lyのRESTAPIと通信しようとしています。ただし、これを機能させるには、HttpWebRequestが最初のリクエストでクレデンシャルを添付する必要があります。ただし、PreAuthenticateがtrueに設定されている場合でも(PreAuthenticateを使用して)、HttpWebRequestは最初のリクエストでクレデンシャルを送信せず、401を待ってからクレデンシャルを送信します。後続のすべてのリクエストのクレデンシャルを送信します)。

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 に答える