处理未处理的HttpException

时间:2012-02-13 09:34:22

标签: c# visual-studio httpexception

我有一个像这样的控制器动作:

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得到一个提示,通知我该用户代码未处理该异常。

我想我只是想让某人澄清我正在做的事情是正确的,而且这个通知可以毫无顾虑地被驳回。事件仍然冒泡到我的Global.asax文件中的Application_Error方法,我实际上正在处理HttpException,所以据我所知,唯一的问题是每次抛出此异常时VS告诉我的不便。

2 个答案:

答案 0 :(得分:1)

  

我想我只是想让某人澄清我正在做的事情   这是正确的,并且可以毫无顾虑地解除此通知。

是的,你所看到的被称为first chance exception。 VS调试器会通知您代码中发生的所有异常。如果你有一个适当的处理程序来处理这个异常,你应该没问题。

答案 1 :(得分:-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更优雅。