2017-06-06 54 views
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> 
+1

可以用e.g提琴手您捕獲傳出的請求,並比較它們成功的郵差請求? – NWard

+0

@NWard補充說明。如果我不得不冒險猜測,那麼當通過流量管理器使用C#/ WebClient時,它會嘗試向不同於原始主機的主機進行身份驗證。看來Postman急切地在初始請求中發送授權標頭。 –

回答

相關問題