1
我有以下的代碼,成功連接到第三方API在C#:401未經授權通過Azure的流量管理器在C#中連接到API時
using (var client = new WebClient())
{
client.Credentials = new NetworkCredential(login.Username, login.Password);
var xml = client.DownloadString(url);
Debug.Write(xml);
}
這直接連接到API時工作正常。但是,我試圖利用Azure流量管理器將負載分散到多個端點,並在執行此操作時收到401個未經授權的異常。它似乎使用郵遞員等工具正確工作,並在請求中配置基本身份驗證。
我試圖將代碼轉換爲RestSharp,但它似乎有相同的症狀。
以下是使用一些不同的技術從Fiddler中請求:
C#/ Web客戶端直接向API端點(成功)
GET <ApiUrl> HTTP/1.1
Host: <ApiHost>
Connection: Keep-Alive
401 Unauthorized
GET <ApiUrl> HTTP/1.1
Authorization: Basic <AuthToken>
Host: <ApiHost>
C#/ Web客戶端天青流量管理器(401未經授權)
GET <TrafficManagerApiUrl> HTTP/1.1
Host: <TrafficManagerApiHost>
401 Unauthorized
GET <ApiUrl> HTTP/1.1
Host: <ApiHost>
郵差天青流量管理器(成功)
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>
可以用e.g提琴手您捕獲傳出的請求,並比較它們成功的郵差請求? – NWard
@NWard補充說明。如果我不得不冒險猜測,那麼當通過流量管理器使用C#/ WebClient時,它會嘗試向不同於原始主機的主機進行身份驗證。看來Postman急切地在初始請求中發送授權標頭。 –