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

本文关键字:代理服务器 请求 GET 外部 应用程序 IIS MVC WebAPI | 更新日期: 2024-09-22 12:51:45

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

当托管在生产服务器/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帐户的情况下执行外部请求?

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

您是否尝试过使用显式设置凭据

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

用户名/密码应该是代理服务器上的授权用户。由于您使用的是Windows身份验证,您可能需要在用户名中加上域名前缀,例如domain''username

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