繁体   English   中英

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

[英]How to make an external GET request from IIS hosted WebAPI/MVC app (via proxy server)

我们使用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帐户的情况下执行外部请求?

您是否尝试使用以下方式显式设置凭据

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

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

该方法应该在您提到的所有3种环境中均有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM