如何从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帐户的情况下执行外部请求?
您是否尝试过使用显式设置凭据
var proxyConfig = new WebProxy(
proxyServerUrl,
BypassOnLocal: false,
BypassList: null,
Credentials: new NetworkCredential(username, password)
);
用户名/密码应该是代理服务器上的授权用户。由于您使用的是Windows身份验证,您可能需要在用户名中加上域名前缀,例如domain''username
这种方法应该适用于您提到的所有3种环境。