C# 远程服务器返回错误:(407)需要代理身份验证

C# 远程服务器返回错误:(407)需要代理身份验证,c#,.net,proxy-authentication,http-status-code-407,machine.config,C#,.net,Proxy Authentication,Http Status Code 407,Machine.config,当我调用web服务时,出现以下错误: “远程服务器返回错误:(407)需要代理身份验证” 我得到了总体思路,我可以通过添加 myProxy.Credentials = NetworkCredential("user", "password", "domain"); 或者在代码中使用DefaultCredentials。我的问题是,对web服务的调用在没有此功能的情况下可以在生产环境中工作 似乎有一个涉及Machine.config的非代码解决方案,但它是什么?目前,我无法访问productio

当我调用web服务时,出现以下错误:

“远程服务器返回错误:(407)需要代理身份验证”

我得到了总体思路,我可以通过添加

myProxy.Credentials = NetworkCredential("user", "password", "domain");
或者在代码中使用DefaultCredentials。我的问题是,对web服务的调用在没有此功能的情况下可以在生产环境中工作

似乎有一个涉及Machine.config的非代码解决方案,但它是什么?目前,我无法访问production box的machine.config文件来查看它的外观。我尝试如下更新machine.config,但仍然出现407错误


可能prod中的机器或web.config具有配置中的设置;您可能不需要代理标记

<system.net>
    <defaultProxy useDefaultCredentials="true" >
        <proxy usesystemdefault="False"
               proxyaddress="http://<ProxyLocation>:<port>"
               bypassonlocal="True"
               autoDetect="False" />
    </defaultProxy>
</system.net>

请咨询您的防火墙专家。 他们为PROD服务器打开防火墙,因此不需要使用代理

感谢您的提示帮助我解决了问题:

必须在两个位置设置凭据才能通过407错误:

HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password", "domain");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");

我也有类似的代理相关问题。就我而言,添加以下内容就足够了:

webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");

它成功了。

在下面的代码中,我们不需要硬编码凭证

service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

只需将其添加到配置中

<system.net>
    <defaultProxy useDefaultCredentials="true" >
    </defaultProxy>
</system.net>

考虑过写这个答案,因为上面没有任何结果&您不想指定代理位置

如果使用<代码> HTTPcli客< /代码>,请考虑这一点。

HttpClientHandler handler = new HttpClientHandler();

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
handler.Proxy = proxy;

var client = new HttpClient(handler);
// your next steps...
如果您使用的是
HttpWebRequest

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri + _endpoint);

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = proxy;

Kind referencec:

谢谢,我试过了,但仍然出现了“(407)需要代理身份验证”错误。添加您列出的部分是否会为您停止错误?在我的本地框上唯一可以确定的是在代码中设置myProxy.Credentials属性。谢谢@Werner du Toit。这正是我所需要的。uirTradeStream?这对我来说非常适合。如果你发现自己不想硬编码你的用户名和密码,请先尝试这个选项。谢谢你的帮助。然而,与mehmet emin展示的方法相比,这种方法是否存在安全风险?添加网络凭据?或者使用网络凭据会给用户带来更多权限,并带来安全风险?@Bryan使用“Mehmet Emin”代码的唯一问题是凭据的硬编码。在现实世界中,由于安全威胁,每个月都会更改密码,所以可以在配置文件中配置密码。所以跟着我的东西走总是好的,或者我也喜欢塞金的方式。工作如预期。Thanks@kucluk您已经创建了服务代理对象,所以在调用任何服务方法之前请先编写此代码。对于那些感兴趣的人,这正是我在NetSuite控制台/web服务应用程序中从防火墙/代理约束(似乎是)中需要的。最佳答案,使其成为配置细节而不是代码问题。这在Asp.net core 2.0中仍然有效。我不得不添加一个web.config文件来处理这个.uirTradeStream?hi,但它不能在webRequest.Proxy=webRequest.DefaultWebProxy下工作;并获取一个异常:(407)需要代理身份验证。请帮忙
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri + _endpoint);

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = proxy;