У меня есть веб-API для загрузки одного файла, который отправляется вдоль тела запроса. У меня есть код ниже, чтобы прочитать двоичные файлы из потока
Task<HttpResponseMessage> task = Request.Content.ReadAsStreamAsync().ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
throw new HttpResponseException(HttpStatusCode.InternalServerError);
try
{
using (Stream stream = t.Result)
{
using (MemoryStream ms = new MemoryStream())
{
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(ms);
byte[] fileBinaries = ms.ToArray();
//logic to process the file
}
}
}
catch (Exception e)
{
//exception handling logic
}
return Request.CreateResponse(HttpStatusCode.Created);
});
return task;
API работает нормально при вызове с загружаемым файлом; и возвращает Http код состояния 201 . Но если я не прикрепил файл к вызову API, он все равно возвращает тот же код, что и нет проверки на полученные двоичные данные. Я хочу добавить эту проверку, чтобы вернуть соответствующее сообщение об ошибке пользователю.
Я попытался выполнить эту проверку, оценив длину байтового массива fileBinaries, прочитанного из Request.Content. Но в массиве есть несколько байтов, которые представляют текст [объект FileList] (не знаю, как эти байты заполняются в массиве, так как я не прикрепил ни один файл с вызовом API). Так что это не сработает для меня.
Я также пытался использовать HttpContext.Current.Request.Files.Count , но он всегда возвращает 0 (возможно, из-за двоичных файлов, отправленных в теле запроса), поэтому не подходит для моей проверки.
Я не могу полагаться ни на какие заголовки, такие как Имя файла , так как они не отправляются в запросе.
Любая помощь, как это сделать?