有没有可能在您的web.config中指定代理凭据?

我需要configuration一个网站,通过代理访问另一台机器上的Web服务。 我可以configuration网站使用代理,但我找不到指定代理需要的凭据的方式,这可能吗? 这是我目前的configuration:

<defaultProxy useDefaultCredentials="false"> <proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" /> </defaultProxy> 

我知道你可以通过代码做到这一点,但网站运行的软件是一个封闭的CMS,所以我不能这样做。

有没有办法做到这一点? MSDN帮助不大

是的,可以在不修改当前代码的情况下指定自己的凭据。 尽pipe如此,它还是需要一小段代码。

用这个类创build一个名为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; } } } 

添加到你的configuration文件中:

 <defaultProxy enabled="true" useDefaultCredentials="false"> <module type = "SomeNameSpace.MyProxy, SomeAssembly" /> </defaultProxy> 

这会在列表中“注入”一个新的代理,并且由于没有默认凭证,WebRequest类将首先调用您的代码并请求您自己的凭证。 您将需要将组装的SomeAssembly放置在CMS应用程序的bin目录中。

这是一个静态的代码,为了得到所有的string,比如用户名,密码和URL,你可能需要实现你自己的ConfigurationSection ,或者在AppSettings中添加一些信息,这更容易。

虽然我还没有find在web.config中指定代理networking凭证的好方法,但您可能会发现仍然可以使用非编码解决scheme,方法是将其包含在web.config中:

  <system.net> <defaultProxy useDefaultCredentials="true"> <proxy proxyaddress="proxyAddress" usesystemdefault="True"/> </defaultProxy> </system.net> 

实现这一目标的关键因素是更改IIS设置,确保运行进程的帐户可以访问代理服务器。 如果您的进程在LocalService或NetworkService下运行,那么这可能不起作用。 机会是,你会想要一个域帐户。

您可以通过在Windows Credentials Manager中添加代理服务器的新通用凭证来指定凭证:

1在Web.config中

 <system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="True" /> </defaultProxy> </system.net> 
  1. 在凭证pipe理器>>添加通用凭证

互联网或networking地址:您的代理地址
用户名:您的用户名
密码:你通过

这个configuration为我工作,没有改变代码。

目录服务/ LDAP查找可用于实现此目的。 它涉及基础设施层面的一些变化,但大多数生产环境都有这样的规定