首页 \ 问答 \ HttpClient通过PostAsync上传文件的奇怪行为(Weird behavior of HttpClient uploading file via PostAsync)

HttpClient通过PostAsync上传文件的奇怪行为(Weird behavior of HttpClient uploading file via PostAsync)

我希望有人对此有解释,因为它让我疯了。

我在WinForms应用程序中有以下代码,用于将使用HttpClient的文件上载到Web API服务。

ProgressMessageHandler progressMsgHandler = new ProgressMessageHandler();
progressMsgHandler.HttpSendProgress += (s, e) =>
{
   this.InvokeIfNeeded(() =>
   {
      // LOG
      this.AddLogLine("Progress: " + e.ProgressPercentage.ToString());
    });
};

using (var client = HttpClientFactory.Create(progressMsgHandler))
{ 
   using (var content = new MultipartFormDataContent())
   {
      var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
      var streamContent = new StreamContent(stream);
      content.Add(streamContent);

      var url = String.Format("{0}?src={1}", STR_URL_FILEMGMT, "IM");
      client.PostAsync(new Uri(url), content).ContinueWith(task =>
      {
        if (task.Result.IsSuccessStatusCode)
         {
            this.InvokeIfNeeded(() =>
            {
               // LOG
               this.AddLogLine("File has been uploaded OK!");
            });
         }
         else
            this.InvokeIfNeeded(() =>
            {
               // LOG
               this.AddLogLine(String.Format("Error during upload: '{0}'", task.Exception.Message));
            });                                
      });
   }
}

请注意,列出的整个代码也包含在try catch中,如果有的话,将打印异常。

对我来说很奇怪的是我根本没有打印任何日志行。 既不是为了进步,也不是为了成功发布,既没有发布错误也没有发布全局尝试。

在调试期间,我看到代码正在执行,但没有遇到日志行所在的任何断点。

可能我没有正确使用HttpClient或这些任务(我是初学者在这btw)? 有谁知道我的代码出了什么问题?


更新 (从Noseratio获得解决方案后):

可以在此处找到有助于我了解HttpClient不需要处理的额外信息


I hope someone has an explanation to this, because it drives me nuts.

I have the following code in a WinForms application to upload a file using HttpClient to a Web API service.

ProgressMessageHandler progressMsgHandler = new ProgressMessageHandler();
progressMsgHandler.HttpSendProgress += (s, e) =>
{
   this.InvokeIfNeeded(() =>
   {
      // LOG
      this.AddLogLine("Progress: " + e.ProgressPercentage.ToString());
    });
};

using (var client = HttpClientFactory.Create(progressMsgHandler))
{ 
   using (var content = new MultipartFormDataContent())
   {
      var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
      var streamContent = new StreamContent(stream);
      content.Add(streamContent);

      var url = String.Format("{0}?src={1}", STR_URL_FILEMGMT, "IM");
      client.PostAsync(new Uri(url), content).ContinueWith(task =>
      {
        if (task.Result.IsSuccessStatusCode)
         {
            this.InvokeIfNeeded(() =>
            {
               // LOG
               this.AddLogLine("File has been uploaded OK!");
            });
         }
         else
            this.InvokeIfNeeded(() =>
            {
               // LOG
               this.AddLogLine(String.Format("Error during upload: '{0}'", task.Exception.Message));
            });                                
      });
   }
}

Please note, entire code listed is also wrapped into a try catch where exception would be printed, if any.

Very weird to me is that I don't get any log line printed at all. Neither for progress, neither for posting with success, neither for posting with errors nor in the global try catch.

During debug, I see the code executing, but doesn't hit any breakpoints where the log lines are.

Probably I don't use correctly HttpClient or these tasks (I am beginner at this btw)? Does anyone know what's going wrong with my code?


UPDATE (after getting the solution from Noseratio):

Extra information which helps me understand that HttpClient does not need to be disposed can be found here


原文:https://stackoverflow.com/questions/22211401
更新时间:2024-02-28 07:02

最满意答案

尝试

self requestContext request uri

如果你不是一个组件,你可以做任何对象

WACurrentRequestContext value request uri

Try

self requestContext request uri

and if you are not in a component but any object you can do

WACurrentRequestContext value request uri

相关问答

更多

相关文章

更多

最新问答

更多
  • python的访问器方法有哪些
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。
  • 响应navi重叠h1和nav上的h1链接不起作用(Responsive navi overlaps h1 and navi links on h1 isn't working)
  • 在C中读取文件:“r”和“a +”标志的不同行为(Reading a File in C: different behavior for “r” and “a+” flags)
  • NFC提供什么样的带宽?(What Kind of Bandwidth does NFC Provide?)
  • 元素上的盒子阴影行为(box-shadow behaviour on elements)
  • Laravel检查是否存在记录(Laravel Checking If a Record Exists)
  • 设置base64图像的大小javascript - angularjs(set size of a base64 image javascript - angularjs)
  • 想学Linux 运维 深圳有哪个培训机构好一点
  • 为什么有时不需要在lambda中捕获一个常量变量?(Why is a const variable sometimes not required to be captured in a lambda?)
  • 在Framework 3.5中使用服务器标签<%=%>设置Visible属性(Set Visible property with server tag <%= %> in Framework 3.5)
  • AdoNetAppender中的log4net连接类型无效(log4net connection type invalid in AdoNetAppender)
  • 错误:发送后无法设置标题。(Error: Can't set headers after they are sent. authentication system)
  • 等待EC2实例重启(Wait for an EC2 instance to reboot)
  • 如何在红宝石中使用正则表达式?(How to do this in regex in ruby?)
  • 使用鼠标在OpenGL GLUT中绘制多边形(Draw a polygon in OpenGL GLUT with mouse)
  • 江民杀毒软件的KSysnon.sys模块是什么东西?
  • 处理器在传递到add_xpath()或add_value()时调用了什么顺序?(What order are processors called when passed into add_xpath() or add_value()?)
  • sp_updatestats是否导致SQL Server 2005中无法访问表?(Does sp_updatestats cause tables to be inaccessible in SQL Server 2005?)
  • 如何创建一个可以与持续运行的服务交互的CLI,类似于MySQL的shell?(How to create a CLI that can interact with a continuously running service, similar to MySQL's shell?)
  • AESGCM解密失败的MAC(AESGCM decryption failing with MAC)
  • SQL查询,其中字段不包含$ x(SQL Query Where Field DOES NOT Contain $x)
  • PerSession与PerCall(PerSession vs. PerCall)
  • C#:有两个构造函数的对象:如何限制哪些属性设置在一起?(C#: Object having two constructors: how to limit which properties are set together?)
  • 平衡一个精灵(Balancing a sprite)
  • n2cms Asp.net在“文件”菜单上给出错误(文件管理器)(n2cms Asp.net give error on Files menu (File Manager))
  • Zurb Foundation 4 - 嵌套网格对齐问题(Zurb Foundation 4 - Nested grid alignment issues)
  • 湖北京山哪里有修平板计算机的