相关疑难解决方法(0)

如何在使用HttpClient类时对代理进行身份验证?

我有一个基于.NET 4构建的控制台应用程序,它使用HttpClient库(通过NuGet获取)通过Internet从公共API检索数据.控制台应用程序位于代理后面.它所在的Windows机器在Internet Explorer中具有正确的代理设置.当控制台应用程序尝试访问外部世界时,它将获得407状态 - "需要代理身份验证".

我还没有写任何特定的代码来处理代理.我假设从407错误,应用程序指向代理没有问题,但代理不验证请求.

我的问题是,是否可以设置HttpClient使用登录用户的凭据来验证代理?如果是这样,怎么样?

var client = new HttpClient(webRequestHandler);
client.PostAsync(RequestUri, MyContent);
Run Code Online (Sandbox Code Playgroud)

.net proxy httpclient .net-4.0

17
推荐指数
2
解决办法
9737
查看次数

如何(优雅地)确定C#winforms应用程序中是否需要代理身份验证

我的用例是这样的,我想呼叫一个web服务,如果我在需要身份验证的代理服务器后面,我想只使用默认凭据...

  WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;
Run Code Online (Sandbox Code Playgroud)

否则我只是简单地拨打电话,确定是否需要事先验证是非常好的,而不是在我尝试拨打电话后处理异常.

想法?

c# authentication proxy winforms

12
推荐指数
2
解决办法
2万
查看次数

在.Net中使用IE设置中的代理自动配置

我无法使用.Net WebRequest在IE选项中获得代理自动配置(PAC)以按预期工作.

根据这篇文章:
代理检测在.NET中使用自动配置减轻用户负担

默认情况下,系统代理应设置为每个WebRequest.

这就是proxy.js pac文件的样子:

function FindProxyForURL(url, host)
{
  return "PROXY ProxyServerName:3118; DIRECT;";
}
Run Code Online (Sandbox Code Playgroud)

我还看了一下这篇文章:我应该如何设置默认代理以使用默认凭据?

这建议在app.config中添加:

<system.net>
  <defaultProxy useDefaultCredentials="true" />
</system.net>
Run Code Online (Sandbox Code Playgroud)

添加这个没有帮助.

我创建了一个小型控制台应用程序,只是为了测试它..这里是:

static void Main(string[] args)
{
    HttpWebRequest request = null;
    try
    {               
        String resolvedAddress = WebRequest.DefaultWebProxy.GetProxy(new Uri("http://www.google.com")).ToString();
        Console.WriteLine("Proxy for address is: " + resolvedAddress);

        Uri m_URLToTest = new Uri("http://www.google.com");
        request = WebRequest.Create(m_URLToTest) as HttpWebRequest;
        request.Method = "GET";
        request.KeepAlive = false;
        request.Timeout = 5000;
        request.Proxy = WebRequest.DefaultWebProxy;
        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream()); …
Run Code Online (Sandbox Code Playgroud)

.net c# proxy pac

12
推荐指数
1
解决办法
1万
查看次数

如何让WebClient(Web服务客户端)自动使用默认代理服务器?

我正在从WinForms应用程序调用web服务.当代理服务器未被使用时,一切正常,但是当使用代理时,应用程序崩溃而不是它对SOAP请求所期望的XML响应,它会得到一个HTML错误页面,上面写着"需要身份验证".

您似乎可以手动设置代理,如下所示:

WebClient client = new WebClient();
WebProxy wp = new WebProxy("proxy server url here");
client.Proxy = wp;
Run Code Online (Sandbox Code Playgroud)

...但在某种程度上,似乎无论如何都没有看到代理服务器而没有执行上述操作,因为生成的错误实际上来自代理服务器.它似乎没有从用户的计算机中获取Windows身份验证登录凭据.我怎么强迫它这样做?

在我自己的机器上,如果我使用Fiddler模​​拟这个(并启用"需要代理身份验证"选项),我会弹出一个对话框询问登录凭据,但这似乎不会发生在我客户端的机器上(使用真正的硬件代理 - McAfee Web Gateway).

我怎么处理这个?我是否需要为用户提供一个手动配置服务器的对话框,或者是否有设置告诉WebClient使用Windows默认代理和用户自己的登录凭据?

更新

好像您可以使用下面的代码获取代理服务器,但这不会导致身份验证对话框出现在所有情况下(适用于某些PC但不适用于其他PC):

IWebProxy defaultProxy = WebRequest.DefaultWebProxy;
if (defaultProxy != null)
{
    defaultProxy.Credentials = CredentialCache.DefaultCredentials;
    client.Proxy = defaultProxy;
}
Run Code Online (Sandbox Code Playgroud)

如果上面的代码是正确的,我不明白为什么不会提示某些用户提供他们的凭据. 我是否必须输入自己的代码来收集用户凭据并将其提供给WebRequest对象?

c# proxy soap web-services webclient

11
推荐指数
3
解决办法
1万
查看次数

如何设置IIS进程的代理设置?

我通过http代理连接互联网,我在localhost的一些web应用程序需要访问互联网.我在哪里可以为它们设置代理设置?

iis proxy iis-7.5

9
推荐指数
1
解决办法
4万
查看次数

如何从身份验证代理后面运行svcutil.exe

我想运行该svcutil.exe工具来访问互联网上的Web服务.不幸的是,每当我尝试时,我都会收到一堆包含以下消息的错误:

请求失败,HTTP状态为407:需要代理身份验证(ISA Server需要授权才能完成请求.拒绝访问Web代理筛选器.

正如我从这篇相关文章中了解到(这里更多详细信息),问题是我坐在验证代理后面.该帖子解释说我需要编辑app.config文件,但我无法弄清楚如何做到这一点.我想我会使用这个 /svcutilConfig:alternate_app.config开关,但我不知道如何构造一个有效的.config文件来传递给那个开关.svcutil.exe使用的默认app.config文件是什么?

wcf svcutil.exe

7
推荐指数
1
解决办法
4960
查看次数

.NET WebApi HttpClient未将Windows身份验证凭据发送到同一域

我正在使用多个Intranet API来尝试构建一些具有所有应用程序共享的服务的应用程序.可以使用Javascript请求直接从GUI调用许多这些服务,但是其他服务器应用程序需要调用其中一些服务.

所有前端和API都使用Windows身份验证.现在我已将它设置为授权任何Windows身份验证用户.匿名身份验证已禁用.

我正在使用HttpClient从Web代码中连接到所需的服务.这是一个例子:

HttpClient client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["OtherServiceUrl"]);

client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json"));

SomeResponseObject responseObject;
HttpResponseMessage response = client.GetAsync("SomeController").Result;
if (response.IsSuccessStatusCode)
{
    responseObject = response.Content.ReadAsAsync<SomeResponseObject>().Result;
}
else
{
    throw new ApplicationException("API request not successful");
}
Run Code Online (Sandbox Code Playgroud)

好消息是,当我在本地运行服务时,这很好用.坏消息是,当我部署到IIS时,对Web服务的调用因未授权响应而失败.

经过大量的摆弄,我意识到我唯一一次获得未经授权的响应是指目标API的域与调用应用程序的域相同.它在我的本地盒子上运行,因为IIS express为每个应用程序分配了一个新端口.IIS中出现匹配域的情况,因为我在IIS中的同一站点下创建了调用应用程序和API作为应用程序,因此这两个应用程序看起来像是同一域中的目录.这几乎就像HttpClient如果注意到域匹配那样,就不会从调用Web应用程序发送身份验证.

我在同一台服务器上创建了一个新站点,但绑定到另一个端口并将API放在那里,然后再次尝试.果然,这解决了问题,来自API的请求通过就好了.

我可以把一堆子域来处理所有这些不同的服务,或者仅仅依靠以使独特的这些服务的域使用不同的端口,但它似乎有些奇怪,我认为这个限制是到位.有谁知道,如果有我可以在处理程序或客户端或别的东西,我可以做,以允许在同一个IIS站点运行的应用程序通过的HttpClient当使用Windows身份验证来相互交谈设置属性?

谢谢!

根据Sachin的建议,我也尝试将此添加到通过HttpClient发出API请求的应用程序的webconfig:

<system.net>
  <defaultProxy useDefaultCredentials="true" />
</system.net>
Run Code Online (Sandbox Code Playgroud)

仍然没有运气.

c# asp.net authentication iis asp.net-web-api

7
推荐指数
1
解决办法
1996
查看次数

Facebook SDK代理设置C#

我使用Facebook SDK .net,但我使用代理与身份验证连接到互联网我得到错误(407)(407)代理身份验证需要如何在Facebook SDK上设置身份验证

facebook-c#-sdk

6
推荐指数
1
解决办法
1875
查看次数