Обработка 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;
    }
}