C# 发布到web API时出现异常,HTTPClient已被释放

C# 发布到web API时出现异常,HTTPClient已被释放,c#,asp.net-web-api,C#,Asp.net Web Api,我在Xamarin.Forms中发布了一个来自Android应用程序的bytearray到.NETCore2.0WebAPI。然而,我得到了一个异常,即NetworkStream已经被释放 提出请求的代码 public async Task PostImageAsync(ImageDTO image) { var content = new MultipartFormDataContent(); var byteArrayContent = new ByteArrayConten

我在Xamarin.Forms中发布了一个来自Android应用程序的bytearray到.NETCore2.0WebAPI。然而,我得到了一个异常,即NetworkStream已经被释放

提出请求的代码

public async Task PostImageAsync(ImageDTO image)
{
    var content = new MultipartFormDataContent();
    var byteArrayContent = new ByteArrayContent(image.Content);
    content.Add(byteArrayContent, image.FileTile, image.FileName);

    try
    {
        using (var httpClient = GetNewHttpClient())
        {
            SetBearerToken(httpClient);

            var response = await httpClient.PostAsync($"{_apiUrl}/api/images/upload", content);
            if (response.IsSuccessStatusCode)
            {

            }
            else
            {

            }
        }
    }
    catch (Exception e)
    {
        //Exception occurs here
        var msg = e.GetBaseException().Message;

        throw;
    }
}
获取HttpClient的代码

API端点

例外情况:

我在这里犯了一个非常明显的错误,但我无法改变我的想法。有人有什么想法吗?

不要处理HttpClient:


还注意到,您将_apirl设置为基本地址,并在帖子中为url添加前缀。挑一个或另一个

不要在异步函数中处理对象

异步方法中的using语句很奇怪,因为Dispose 调用可以在与获取调用的线程不同的线程中执行 资源(取决于同步上下文等),但仍将 发生假设你等待的东西曾经出现或消失 当然失败了。就像你不会打电话进来一样 如果using语句包含对方法的调用,则为非异步代码 永远不会回来

@乔恩·斯基特


在调用之前是否使用了HttpClientHandler?SetBearerToken中发生了什么?@CamiloTerevinto,不,这是API中第一个也是唯一一个使用HttpClientHandler的方法it@Seb,我会用这种方法更新问题谢谢,我会调查一下你必须处理HttpClient,这是完全错误的。
private HttpClient GetNewHttpClient()
{
     //HttpClientHandler is a global variable                
     var httpClient = new HttpClient(HttpClientHandler, false) {BaseAddress = new Uri(_apiUrl)};

    return httpClient;
}
[HttpPost]
public async Task<IActionResult> Upload(IFormFile file)
{
    if (file == null || file.Length == 0) return BadRequest();

    return Ok();
}
private static void SetBearerToken(HttpClient client)
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", App.StoredToken);
        }
cannot access a disposed object. Object name: 'System.Net.Sockets.NetworkStream'.