11

コンテナー参照名 (つまり、BLOB 内のファイルの完全パス名) に基づいて、Azure 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にあるクラスは、ブロブからストリームをダウンロードするヘルパー クラスです。

私の質問はコードのコメントに記載されています: ファイル/ストリームが見つからない場合、どのようにシナリオを処理すればよいですか? 現在、空の PDF ファイルを渡していますが、これは最善の方法ではないと感じています。

4

2 に答える 2

21

Web アプリケーションで見つかりませんでしたを処理する正しい方法は、クライアントに 404 HTTP ステータス コードを返すことです。これは、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;
    }
}
于 2011-06-23T07:09:53.040 に答える