如何从IIS托管的WebAPI / MVC应用程序(通过代理服务器)发出外部GET请求

时间:2015-03-03 09:34:35

标签: c# asp.net-mvc iis asp.net-web-api credentials

我们使用 Windows身份验证。我已经创建了 WebAPI / MVC 应用程序。

托管在生产服务器 / IIS 时,appplication需要凭据才能对外部网站执行 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 帐户的情况下执行外部请求?

1 个答案:

答案 0 :(得分:0)

您是否尝试使用

明确设置凭据
var proxyConfig = new WebProxy(
proxyServerUrl, 
BypassOnLocal: false, 
BypassList: null, 
Credentials: new NetworkCredential(username, password)
);

用户名/密码应该是代理服务器上的授权用户。由于您使用的是Windows身份验证,因此您可能需要在用户名E.g中添加域名前缀。域\用户名

这种方法应该适用于您提到的所有3种环境。