我需要配置一个网站,通过代理访问另一台机器上的Web服务。我可以将网站配置为使用代理,但我找不到指定代理所需凭据的方法,这可能吗?这是我目前的配置:
<defaultProxy useDefaultCredentials="false">
<proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" />
</defaultProxy>
我知道您可以通过代码执行此操作,但网站运行的软件是一个闭源CMS,因此我无法执行此操作。
有没有办法做到这一点? MSDN对我帮助不大..
答案 0 :(得分:100)
是的,可以在不修改当前代码的情况下指定自己的凭据。它需要您的部分代码。
使用此类创建名为 SomeAssembly.dll 的程序集:
namespace SomeNameSpace
{
public class MyProxy : IWebProxy
{
public ICredentials Credentials
{
get { return new NetworkCredential("user", "password"); }
//or get { return new NetworkCredential("user", "password","domain"); }
set { }
}
public Uri GetProxy(Uri destination)
{
return new Uri("http://my.proxy:8080");
}
public bool IsBypassed(Uri host)
{
return false;
}
}
}
将此添加到您的配置文件中:
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type = "SomeNameSpace.MyProxy, SomeAssembly" />
</defaultProxy>
这会在列表中“注入”一个新代理,并且由于没有默认凭据,WebRequest类将首先调用您的代码并请求您自己的凭据。您需要将汇编SomeAssembly放在CMS应用程序的bin目录中。
这是一个静态代码,要获取用户,密码和网址等所有字符串,您可能需要实现自己的ConfigurationSection,或在AppSettings中添加一些信息,更容易。
答案 1 :(得分:17)
虽然我没有找到在web.config中指定代理网络凭据的好方法,但您可能会发现仍然可以使用非编码解决方案,方法是将其包含在您的web.config中:
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="proxyAddress" usesystemdefault="True"/>
</defaultProxy>
</system.net>
实现这一目标的关键因素是更改IIS设置,确保运行该进程的帐户可以访问代理服务器。 如果您的进程在LocalService或NetworkService下运行,那么这可能不起作用。有可能,您需要一个域帐户。
答案 2 :(得分:4)
您可以通过在Windows凭据管理器中添加代理服务器的新Generic Credential来指定凭据:
1在Web.config中
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="True" />
</defaultProxy>
</system.net>
互联网或网络地址:您的代理地址
用户名:您的用户名
密码:你通过了
此配置对我有用,无需更改代码。
答案 3 :(得分:1)
目录服务/ LDAP查找可用于实现此目的。它涉及基础架构级别的一些变化,但大多数生产环境都有这样的规定