16

クライアントのWebサービスにリクエストを送信しようとしています(クライアントの基盤となるプラットフォームがわかりません)。「Web参照の追加」を使用してVisualStudio2010でクライアントのWSDLを使用し、プロキシクラス(「ContactService」と呼ばれる)を生成しました。

次に、以下のような認証ヘッダーをサービスリクエストに追加する必要があります。

Header=Authorization & Value=Basic 12345678901234567890

(上記の「123456 ...」の値は単なるプレースホルダーです)

ContactService service = new ContactService();

//not sure if this is the right way - it's not working
WebClient client = new WebClient();
client.Headers.Add("Authorization", "Basic 12345678901234567890");            
service.Credentials = client.Credentials;

int contactKey = null;
try
{                
   contactKey = service.CreateContact("ABC", emailAddress, firstName, lastName, null);
}

サービスリクエストに認証ヘッダーを追加する適切な方法は何ですか?

ありがとうございました!

4

3 に答える 3

19

上記の応答は正しい方向に進んでいましたが、別の場所に配置する必要がありました。

.Netが生成したWeb参照プロキシクラスにこれを追加しました。

protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(uri);            
        req.Headers.Add(HttpRequestHeader.Authorization,
                "Basic " + "12345678901234567890");

        return req;
    }

Webリファレンスプロキシクラスは、System.Web.Services.Protocols.SoapHttpClientProtocolを拡張します。このクラスには、System.Net.WebRequest.GetWebRequest(Uri uri)への呼び出しが含まれています。WebRequestを使用すると、プロキシクラスのメソッドが呼び出されたときに、リクエストに特定のヘッダーを設定できます。

ご協力いただきありがとうございます!

于 2013-01-24T13:07:22.243 に答える
14

行うべき変更がいくつかあります。

まず、便利な定数がありHttpRequestHeader.Authorizationます。

次に、ヘッダーがBase64エンコードされることを期待していますか?これは通常、基本認証に必要です。

WebClient.Headers.Add(HttpRequestHeader.Authorization, 
    "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("12345678901234567890")));
于 2013-01-23T20:48:02.290 に答える
2

私は今この問題を抱えている人のためにこれを書いています。前述の回答のように、継承階層はWebClientProtocolクラスに昇格します。このクラスにはプロパティがあり、インスタンスICredentialsによってこのプロパティを次のように設定するだけです。NetworkCredential

YourServis.Credentials = new NetworkCredential("UserName", "Password", "Domain");

Reference.csを変更したり、ヘッダーを追加したりすることなく、tahtが最も簡単な方法だと思います。

于 2018-04-11T12:28:45.527 に答える