【发布时间】:2018-04-02 11:36:58
【问题描述】:
我将一个字节数组从 Xamarin.Forms 中的 Android 应用程序发布到 .NET Core 2.0 WebAPI。但是,我收到一个异常,说 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 的代码
private HttpClient GetNewHttpClient()
{
//HttpClientHandler is a global variable
var httpClient = new HttpClient(HttpClientHandler, false) {BaseAddress = new Uri(_apiUrl)};
return httpClient;
}
API 端点
[HttpPost]
public async Task<IActionResult> Upload(IFormFile file)
{
if (file == null || file.Length == 0) return BadRequest();
return Ok();
}
编辑 - SetBearerToken 方法
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'.
感觉我在这里犯了一个非常明显的错误,但我无法理解它。有人有什么想法吗?
【问题讨论】:
-
在此调用之前是否使用了
HttpClientHandler? -
SetBearerToken 中发生了什么?
-
@CamiloTerevinto,不,这是 API 中第一个也是唯一一个使用它的方法
-
@Seb,我会用那个方法更新问题
标签: c# asp.net-web-api