2015-12-02 103 views
0

我需要在沒有任何授權的情況下調用RESTful API。該API使用自己的自定義授權。我可以使用Postman成功訪問API,但是從我的應用程序調用到完全相同的URL失敗,出現「拒絕訪問」。我能看到的唯一區別是郵遞員被設置爲「無驗證」在未經授權的情況下調用RESTful API會出現問題嗎?

這裏是代碼進行調用:

var task = client.GetAsync(url) 
     .ContinueWith((taskwithresponse) => 
     { 
      var response = taskwithresponse.Result; 
      var jsonString = response.Content.ReadAsStringAsync(); 
      jsonString.Wait(); 
      var model = JsonConvert.DeserializeObject<object>(jsonString.Result).ToString(); 

     }); 
     task.Wait(); 

我已經等了一個小時的尋找,找不到任何有關這個。任何幫助是極大的讚賞。

下面是郵差返回的標題:

Access-Control-Allow-Headers → Content-Type 
Access-Control-Allow-Methods → GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Origin → * 
Cache-Control → no-cache 
Content-Length → 70838 
Content-Type → application/json; charset=utf-8 
Date → Wed, 02 Dec 2015 18:10:13 GMT 
Expires → -1 
Persistent-Auth → false 
Pragma → no-cache 
Server → Microsoft-IIS/7.5 
WWW-Authenticate → Negotiate oYG2MIGzoAMKAQChCwYJKoZIgvcSAQICooGeBIGbYIGYBgkqhkiG9xIBAgICAG+BiDCBhaADAgEFoQMCAQ+ieTB3oAMCARKicARuLFrwoBSpoL7PwlX1E3MEnL7ub3KtmgZG2iGIfYqY+QyGXI1btpDaiLIBFstpQeunfY8DvHV/dcTbsVSeGW/ciuM/aZi1nG2AfHjlu6neYlTJTASF2bGv/M1EKkZRDvRoND2uLbfGdiXzrN5+M3U= 
X-AspNet-Version → 
X-AspNet-Version 
Custom header 
4.0.30319 
X-Powered-By → ASP.NET 
X-UA-Compatible → IE=edge 

無頭正從郵遞員發送。

+0

您是使用HttpClient還是RestSharpClient? – vendettamit

+0

我正在使用HttpClient – Hoodlum

+0

你可以分享郵遞員的HTTP頭嗎? –

回答

2

看起來其餘服務正在使用NTLM或Kerberos安全令牌進行身份驗證。郵差自動發送Windows身份信息。通過C#代碼,您必須明確指定Windows身份作爲模擬身份標識。

嘗試WebClient,而不是HttpClient和使用默認值:

var wi = (WindowsIdentity)HttpContext.User.Identity; 

var wic = wi.Impersonate(); 

using (var client = new WebClient { UseDefaultCredentials = true }) 
    { 
     client.DownloadStringAsync(url); 
    } 

wic.Undo(); 

如果Async不起作用嘗試同步方法DownloadString

查看source瞭解更多詳情。

+0

異步方法不起作用,但同步方法沒有。哇噢! – Hoodlum

+1

這是因爲線程安全上下文。當前線程知道在代碼中完成的身份模擬,但新線程不會。乾杯!! – vendettamit

相關問題