尝试使用ASP.NET捕获不明显

时间:2018-07-13 21:22:09

标签: c# asp.net

我已经创建了一个名为mytestpage的简单网页,并且正在使用以下代码:

@using System
@using System.Drawing
@using System.IO

  try
  {
    int d = 1/0;
    <p>Error not caught</p>
  }
  catch(Exception notUsedForTesting)
  {
    <p>Error caught</p>
  }

我的网站没有在mytestpage上看到“捕获错误”文本,而是重定向到另一个页面,如下所示:Error.cshtml?aspxerrorpath = / mytestpage。

我想知道如何避免这种重定向,并自行处理异常。

我当前的web.config文件包含:

  <customErrors mode="RemoteOnly">
    <error statusCode="500" redirect="~/Error.cshtml"/>
  </customErrors>

我尝试过:

  <customErrors mode="Off">
  </customErrors>

也是如此,并且我得到了相同的重定向结果。

1 个答案:

答案 0 :(得分:2)

只需在本地对其进行测试。看来您得到的错误不是除以零的异常,而是编译错误

发生的事情是,由于未启用预编译,因此页面将被即时编译。因此,当您导航到页面时,它将触发编译,但该1/0立即出错。您的尝试捕获逻辑甚至没有执行。

尝试使用throw new Exception();代替1/0,它应该可以正常工作

但是,我不建议您直接在View内部执行复杂的逻辑。您应该尝试将try catch逻辑移至ViewModel或至少控制器级别