一尘不染

是否可以在web.config中指定代理凭据?

c#

我需要配置一个网站以通过代理访问另一台计算机上的Web服务。我可以将网站配置为使用代理,但找不到指定代理所需凭据的方法,这可能吗?这是我当前的配置:

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

我知道您可以通过代码执行此操作,但是该网站正在运行的软件是开源CMS,因此我无法执行此操作。

有什么办法吗?MSDN对我没有太大帮助。


阅读 221

收藏
2020-05-19

共1个答案

一尘不染

是的,可以在不修改当前代码的情况下指定您自己的凭据。不过,这只需要您编写一小段代码。

使用此类创建一个名为 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目录中。

这是某种程度上的静态代码,要获取所有字符串(如用户,密码和URL),您可能需要实现自己的ConfigurationSection或在AppSettings中添加一些信息,这要容易得多。

2020-05-19