Обработка FileContentResult, когда файл не найден
у меня есть действие контроллера, которое загружает файл из Azure blob на основе ссылочного имени контейнера (т. е. полного пути к файлу в blob). Код выглядит примерно так:
public FileContentResult GetDocument(String pathName)
{
try
{
Byte[] buffer = BlobStorage.DownloadFile(pathName);
FileContentResult result = new FileContentResult(buffer, "PDF");
String[] folders = pathName.Split(new char[] { '' }, StringSplitOptions.RemoveEmptyEntries);
// get the last one as actual "file name" based on some convention
result.FileDownloadName = folders[folders.Length - 1];
return result;
}
catch (Exception ex)
{
// log error
}
// how to handle if file is not found?
return new FileContentResult(new byte[] { }, "PDF");
}
на BlobStorage
class существует мой вспомогательный класс для загрузки потока из blob.
мой вопрос задан в комментарии кода: как я должен обрабатывать сценарий, когда файл/поток не найден? В настоящее время я передаю пустой PDF-файл, который я чувствую не лучший способ сделать это.
1 ответов
правильным способом обработки не найденного в веб-приложении является возврат кода состояния HTTP 404 клиенту, который в ASP.NET термины MVC переводятся в возврат HttpNotFoundResult из действия контроллера:
return new HttpNotFoundResult();
Ахх, упс, не заметил, что ты все еще на ASP.NET MVC 2. Вы могли бы реализовать его самостоятельно, потому что HttpNotFoundResult
был введен только в ASP.NET MVC 3:
public class HttpNotFoundResult : ActionResult
{
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
context.HttpContext.Response.StatusCode = 404;
}
}