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>
あなたは例えばバイオリンを使用して発信要求をキャプチャし、成功した郵便配達の要求にそれらを比較することはできますか? – NWard
@NWardが追加されました。私が推測しなければならないのであれば、トラフィックマネージャを使ってC#/ WebClientを使用する場合、元のホストとは異なるホストに認証しようとしています。 Postmanは最初のリクエストでAuthorizationヘッダーを熱心に送るようです。 –