2015-03-03 66 views
0

我們使用Windows身份驗證。我已經創建了WebAPI/MVC應用程序以供玩。如何從IIS託管的WebAPI/MVC應用程序(通過代理服務器)發出外部GET請求

生產服務器上託管/IIS應用項目需要憑據來執行HTTP GET到外部網站。由於某些原因,我們暫時不能使用特殊的AD帳戶。我已閱讀ASP.NET模擬。據我瞭解,有可能與調用者的憑據合併?我試着使用這段代碼,但我不確定它是否適合與WebAPI一起使用。

[HttpGet] 
[Route("api/test")] 
public HttpResponseMessage test() { 
    using(var ctx = WindowsIdentity.GetCurrent().Impersonate()) { 
     var proxyOptions = new WebProxy("[proxyUrl]"); 
      proxyOptions.UseDefaultCredentials = true; 

     var client = new WebClient(); 
      client.UseDefaultCredentials = true;     
      client.Proxy = proxyOptions; 

     return new HttpResponseMessage { 
      Content = new StringContent(
       content: client.DownloadString("[externalApiUrl]"), 
       encoding: Encoding.Default, 
       mediaType: "text/plain" 
      ) 
     }; 
    } 
} 

無論如何,這是行不通的。

我應該配置代表而不是模仿

如何執行一個外部請求,而不單獨AD帳戶呢?

回答

0

您是否嘗試過使用

var proxyConfig = new WebProxy(
proxyServerUrl, 
BypassOnLocal: false, 
BypassList: null, 
Credentials: new NetworkCredential(username, password) 
); 

的用戶名/密碼應該是你的代理服務器上的授權用戶明確設置憑據。由於您使用Windows身份驗證,因此您可能需要在用戶名E.g.中加上域名前綴。域\用戶名

這種方法應該適用於您提到的所有3種環境。

+0

是的,這確實是最簡單的方法。但我們可能沒有專門用於此目的的帳戶。 – lexeme 2015-03-03 10:02:56

+0

您是否嘗試過CredentialCache.DefaultCredentials而不是DefaultNetworkCredentials – 2015-03-03 10:09:30

相關問題