HttpClient上的ObjectDisposedException

蒂姆

我有一个带有多个API调用的Windows通用项目。即使我的其他调用都可以像这样完美地工作,一种方法也无法工作。我尝试过使用using关键字以解决问题。

功能:

public async Task<User> GetNewUser(string user_guid, OAuthTokens OAuth)
{
    String userguidJSON = VALIDJSON_BELIEVE_ME;
    using (var httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", Encrypt(OAuth.Accesstoken));

        using (HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, BASE_URL + URL_USERS + "/data"))
        {
            req.Content = new StringContent(userguidJSON, Encoding.UTF8, "application/json");
            await httpClient.SendAsync(req).ContinueWith(respTask =>
            {
                Debug.WriteLine(req.Content.ReadAsStringAsync()); //Error is thrown ono this line
            });
            return null;
        }
    }
}

编辑

public async Task<User> GetNewUser(string user_guid, OAuthTokens OAuth)
{
    String userguidJSON = VALIDJSON_BELIEVE_ME;
    using (var httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", Encrypt(OAuth.Accesstoken));

        using (HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, BASE_URL + URL_USERS + "/data"))
        {
            req.Content = new StringContent(userguidJSON, Encoding.UTF8, "application/json");
            await httpClient.SendAsync(req);
            var result = await req.Content.ReadAsStringAsync(); //Cannot access a disposed object. Object name: 'System.Net.Http.StringContent'.
            Debug.WriteLine(result);
            return null;
        }
    }
}

堆栈跟踪

 at System.Net.Http.HttpContent.CheckDisposed()
   at System.Net.Http.HttpContent.ReadAsStringAsync()
   at Roadsmart.Service.RoadsmartService.<GetNewUser>d__2e.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 Roadsmart.ViewModel.SettingsPageViewModel.<SetNewProfilePicture>d__1e.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__3(Object state)
   at System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()
斯里拉姆·萨克提维(Sriram Sakthivel)

ObjectDisposedException被抛出,因为您正在处理HttpRequestMessageHttpClientreq.Content.ReadAsStringAsync()完成之前

请注意,这req.Content.ReadAsStringAsync()是一个异步方法。您需要等待它完成后才能处置HttpClient

此外,你似乎是打电话ReadAsStringAsyncreq.Content,应该不就是response.Content

using (HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, BASE_URL + URL_USERS + "/data"))
{
    req.Content = new StringContent(userguidJSON, Encoding.UTF8, "application/json");
    var response = await httpClient.SendAsync(req);
    var result = await response.Content.ReadAsStringAsync();//await it
    Debug.WriteLine(result);
    return null;
}

ContinueWith处理异步/等待时几乎没有理由使用所有这些工作都由编译器为您完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ObjectDisposedException而实际上不需要连接

来自分类Dev

使用HttpClient的Windows Phone 8.1上的Cookie

来自分类Dev

在Jetty HttpClient Hang上寻求建议

来自分类Dev

如何在HttpClient上注册AuthSchemes

来自分类Dev

在Angular 5上从HTTPClient检索XML

来自分类Dev

Android 4.4上的Apache HttpClient 4.3

来自分类Dev

在Apache HttpClient 4.3.6上禁用NTLM

来自分类Dev

在wpf项目中的HttpClient上使用await

来自分类Dev

在Unity上使用.NET自己的httpClient类

来自分类Dev

简单的HttpClient测试在Mono上失败

来自分类Dev

HttpClient在JavaScript上获取编码字符

来自分类Dev

使用httpclient在Android上保持Cookie会话

来自分类Dev

使用HttpClient的Windows Phone 8.1上的Cookie

来自分类Dev

HttpClient冻结在GetStringAsync方法上

来自分类Dev

在Apache HttpClient 4.3.6上禁用NTLM

来自分类Dev

HttpClient在Windows Phone上缓冲响应流

来自分类Dev

在wpf项目中的HttpClient上使用await

来自分类Dev

使用 PoolingNHttpClientConnectionManager 在 HttpClient 上禁用 SSL

来自分类Dev

HttpClient 在服务器上启用缓存

来自分类Dev

HttpClient 在 RESTful API 上无法正常工作

来自分类Dev

Xamarin上的异常:System.ObjectDisposedException:无法访问已处置的对象'Xamarin.Forms.Platform.Android.FastRenderers.LabelRenderer'

来自分类Dev

正确避免ObjectDisposedException

来自分类Dev

ObjectDisposedException:CancellationTokenSource已被处置

来自分类Dev

ObjectDisposedException:CancellationTokenSource已被处置

来自分类Dev

扩展 UserManager 导致 ObjectDisposedException

来自分类Dev

如何在HttpClient上指定多个授权参数?

来自分类Dev

在WinRT HttpClient上设置请求Content-Type

来自分类Dev

Android 4.2上的HttpClient.execute(HttpPost)错误

来自分类Dev

我在可移植类库上使用HttpClient获得403

Related 相关文章

  1. 1

    ObjectDisposedException而实际上不需要连接

  2. 2

    使用HttpClient的Windows Phone 8.1上的Cookie

  3. 3

    在Jetty HttpClient Hang上寻求建议

  4. 4

    如何在HttpClient上注册AuthSchemes

  5. 5

    在Angular 5上从HTTPClient检索XML

  6. 6

    Android 4.4上的Apache HttpClient 4.3

  7. 7

    在Apache HttpClient 4.3.6上禁用NTLM

  8. 8

    在wpf项目中的HttpClient上使用await

  9. 9

    在Unity上使用.NET自己的httpClient类

  10. 10

    简单的HttpClient测试在Mono上失败

  11. 11

    HttpClient在JavaScript上获取编码字符

  12. 12

    使用httpclient在Android上保持Cookie会话

  13. 13

    使用HttpClient的Windows Phone 8.1上的Cookie

  14. 14

    HttpClient冻结在GetStringAsync方法上

  15. 15

    在Apache HttpClient 4.3.6上禁用NTLM

  16. 16

    HttpClient在Windows Phone上缓冲响应流

  17. 17

    在wpf项目中的HttpClient上使用await

  18. 18

    使用 PoolingNHttpClientConnectionManager 在 HttpClient 上禁用 SSL

  19. 19

    HttpClient 在服务器上启用缓存

  20. 20

    HttpClient 在 RESTful API 上无法正常工作

  21. 21

    Xamarin上的异常:System.ObjectDisposedException:无法访问已处置的对象'Xamarin.Forms.Platform.Android.FastRenderers.LabelRenderer'

  22. 22

    正确避免ObjectDisposedException

  23. 23

    ObjectDisposedException:CancellationTokenSource已被处置

  24. 24

    ObjectDisposedException:CancellationTokenSource已被处置

  25. 25

    扩展 UserManager 导致 ObjectDisposedException

  26. 26

    如何在HttpClient上指定多个授权参数?

  27. 27

    在WinRT HttpClient上设置请求Content-Type

  28. 28

    Android 4.2上的HttpClient.execute(HttpPost)错误

  29. 29

    我在可移植类库上使用HttpClient获得403

热门标签

归档