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 中的一个新 ActionResult,还有一个受保护的方法HttpNotFound()作为控制器类的一部分,它做同样的事情。在这两种情况下,您还可以提供消息字符串。

我认为在unit-testing方面返回 ActionResult 也更优雅。

于 2012-02-13T09:37:50.500 回答