【问题标题】:Dealing with unhandled HttpException处理未处理的 HttpException
【发布时间】:2012-02-13 09:34:21
【问题描述】:

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

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 每次抛出此异常时都告诉我不便。

【问题讨论】:

标签: c# visual-studio httpexception


【解决方案1】:

我想我只是想让有人澄清一下我正在做的是 正确,并且可以放心地忽略此通知。

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

【讨论】:

  • 您好,Darin,感谢您的快速回答,消除了我的任何担忧。
【解决方案2】:

我假设您想将 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也更优雅。

【讨论】:

  • HttpNotFoundResult 不呈现视图。它只是将状态码设置为 404 并返回一个空结果。详情请见this post
  • @jbaum012 我不确定答案到底有什么问题。 OP(大约两年前)要求不要渲染视图,而是要一种不让视觉工作室中断的方法。即使在您链接的答案中,它也指定了相同的内容,只是另外声明您必须指定 404 将返回的 html。在我看来,这是另一回事。 OP 还只是想确认他对异常是健全性检查这一事实的怀疑。这是我现在读到的。
  • 我无意冒犯,但我只是发现您的解决方案具有误导性。 HttpNotFoundResult 不是引发新 HttpException 的适当替代方法。举个例子,如果您要在 web.config 中指定自定义错误页面,return new HttpNotFoundResult 不会呈现您的自定义错误页面。
猜你喜欢
  • 1970-01-01
  • 2014-02-28
  • 2011-11-19
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
相关资源
最近更新 更多