c# - 使用 HttpClient 时出现 HttpRequestException?

标签 c# win-universal-app dotnet-httpclient

我有一个请求 URL 的 WebClient。我想在 UWP 应用程序中做同样的事情,我看到我必须导入 Microsoft.Net.Http 并使用 HttpClient

所以我替换了这个(在类库中):

WebClient client = new WebClient();
client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
string content = client.DownloadString(url);

通过这个在 PCL 库中:

HttpClient client = new HttpClient();
string content = await client.GetStringAsync(url);

现在我得到了这个异常(exception):

System.Net.Http.HttpRequestException occurred
  HResult=-2147012867
  Message=An error occurred while sending the request.
  Source=System.Net.Http
  StackTrace:
       at System.Net.Http.HttpClientHandler.<SendAsync>d__1.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at XXXX.YYYY.MHDJ.ZZZZ.<ParsePage>d__4.MoveNext()
  InnerException: 
       ErrorCode=-2147012867
       HResult=-2147012867
       Message=Le texte associé à ce code d’erreur est introuvable.

Impossible d'établir une connexion avec le serveur

       Source=""
       StackTrace:
            at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            at System.Net.Http.HttpHandlerToFilter.<SendAsync>d__1.MoveNext()
         --- End of stack trace from previous location where exception was thrown ---
            at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            at System.Net.Http.HttpClientHandler.<SendAsync>d__1.MoveNext()
       InnerException: 

我认为问题不是标题,那是什么?

最佳答案

十六进制的 HRESULT 代码 -21470128670x80072EFD0x8007 前缀意味着它实际上是一个 HRESULT wrapper around a Win32 error code .原始的 Win32 错误代码是 0x2EFD

Win32 error code list告诉我们值 0x2EE00x2F8FERROR_INTERNET_* 错误代码,这听起来像是正确的错误类型。在访问 Win32 ERROR_INTERNET_* error code listing 的链接后,我们可以将错误代码 0x2EFD 转换回十进制 (12029) 并发现它是错误 ERROR_INTERNET_CANNOT_CONNECT:

The attempt to connect to the server failed.

相当笼统,没有太大帮助。

我建议再次尝试连接,确保您的应用程序具有适当的权限并且设备确实具有有效的互联网连接。如果这不起作用,请尝试重新添加 UserAgent header ;您设备上的网络堆栈可能坚持使用它。

更新: 追踪错误代码的含义相当乏味,所以我 wrote an app to do it .

关于c# - 使用 HttpClient 时出现 HttpRequestException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36631841/

相关文章:

c# - HttpClient的多种实现

c# - .NET HttpClient GET 请求在空闲约 100 秒后非常慢

c# - Sitecore 子布局中的字符串中缺少正斜杠

c# - WPF ContextMenu itemtemplate,menuitem inside menuitem

c# - 在 StructureMap 中有条件地获取实例

c# - 如何以编程方式将音频添加到 Toast 通知?

c# - Windows Phone 8.1 中的 BackButtonPressed 问题?

c# - UWP CompactOverlay 模式(画中画)IsViewModeSupported 异常

c# - 如何计算 gridview 中选定的复选框的数量

c# - 取消静态 HttpClient 上的异步调用