2017-06-06 2 views
1

I首尾C#で、サードパーティのAPIに接続し、次のコードを持っている:APIに直接接続するとき無断401 C#でのAzure Traffic Managerの経由APIに接続する

using (var client = new WebClient()) 
{ 
    client.Credentials = new NetworkCredential(login.Username, login.Password); 

    var xml = client.DownloadString(url); 
    Debug.Write(xml); 
} 

これが正常に動作します。しかし、私はAzure Traffic Managerを利用して複数のエンドポイントに負荷を分散しようとしています。これを行う際に401 Unauthorized例外が発生します。 Postmanのようなツールを使って正しく動作し、要求にBasic Authを設定するようです。

コードをRestSharpに変換しようとしましたが、同じ症状があるようです。 APIエンドポイント(成功)

GET <ApiUrl> HTTP/1.1 
Host: <ApiHost> 
Connection: Keep-Alive 

401 Unauthorized 

GET <ApiUrl> HTTP/1.1 
Authorization: Basic <AuthToken> 
Host: <ApiHost> 

C Azureのトラフィックマネージャ(401権限)へ#/ Webクライアントに直接

C#/ Webクライアント:ここ

は、いくつかの異なる技術を用いてフィドラーからリクエストされています

GET <TrafficManagerApiUrl> HTTP/1.1 
Host: <TrafficManagerApiHost> 

401 Unauthorized 

GET <ApiUrl> HTTP/1.1 
Host: <ApiHost> 

ポストマンのAzureへのトラフィックマネージャ(成功)

GET <TrafficManagerApiUrl> HTTP/1.1 
Host: <TrafficManagerApiHost> 
Connection: keep-alive 
Authorization: Basic <AuthToken> 
Cache-Control: no-cache 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 
Postman-Token: 13396800-33ab-8d7b-664f-68b99e8f4ac1 
Accept: */* 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 


302 Redirect 

GET <ApiUrl> HTTP/1.1 
Host: <ApiHost> 
Connection: keep-alive 
Authorization: Basic <AuthToken> 
Cache-Control: no-cache 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 
Postman-Token: 13396800-33ab-8d7b-664f-68b99e8f4ac1 
Accept: */* 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: JSESSIONID=<jsessionid> 
+1

あなたは例えばバイオリンを使用して発信要求をキャプチャし、成功した郵便配達の要求にそれらを比較することはできますか? – NWard

+0

@NWardが追加されました。私が推測しなければならないのであれば、トラフィックマネージャを使ってC#/ WebClientを使用する場合、元のホストとは異なるホストに認証しようとしています。 Postmanは最初のリクエストでAuthorizationヘッダーを熱心に送るようです。 –

答えて

関連する問題