0

次のようなコントローラー アクションがあります。

public ActionResult Index(string url)
{
     var pageTitle = url.Split('/')[0];
     var page = Services.PageService.GetPage(pageTitle);

     if (page == null)
     {
         throw new HttpException((Int32) HttpStatusCode.NotFound, "NotFound");
     }

      return View(page);
 }

サイトをデバッグするたびに、HttpException がスローされると、Visual Studio からプロンプトが表示され、ユーザー コードによって例外が処理されなかったことを通知されます。

私がやっていることは正しいこと、そしてこの通知は心配せずに却下できることを誰かに明確にしてもらいたいだけだと思います。このイベントは、実際に HttpException を処理している Global.asax ファイルの Application_Error メソッドまでバブルアップします。そのため、唯一の問題は、この例外がスローされるたびに VS が通知する不便さです。

4

2 に答える 2

1

私がやっていることは正しいこと、そしてこの通知は心配せずに却下できることを誰かに明確にしてもらいたいだけだと思います.

はい、あなたが見ているのは最初のチャンスの例外と呼ばれています。VS デバッガーは、コードで発生するすべての例外を通知します。この例外に対する適切なハンドラーがあれば、問題ありません。

于 2012-02-13T09:36:34.743 に答える
-1

ページのユーザー/消費者に http コード (この場合は 404) を返したいと思います。したがって、次のようにする必要があります。

public ActionResult Index(string url)
{
     var pageTitle = url.Split('/')[0];
     var page = Services.PageService.GetPage(pageTitle);

     if (page == null)
     {
        return new HttpNotFoundResult();
     }
      return View(page);
 }

HttpNotFoundResultは asp.net-mvc3の新しい ActionResultHttpNotFound()です。同じことを行うコントローラー クラスの一部として保護されたメソッドもあります。どちらの場合も、メッセージ文字列を指定することもできます。

ActionResult を返すことも、単体テストに関してはより優雅だと思います。

于 2012-02-13T09:37:50.500 に答える