我已经创建了一个名为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>
也是如此,并且我得到了相同的重定向结果。
答案 0 :(得分:2)
只需在本地对其进行测试。看来您得到的错误不是除以零的异常,而是编译错误
发生的事情是,由于未启用预编译,因此页面将被即时编译。因此,当您导航到页面时,它将触发编译,但该1/0
立即出错。您的尝试捕获逻辑甚至没有执行。
尝试使用throw new Exception();
代替1/0
,它应该可以正常工作
但是,我不建议您直接在View内部执行复杂的逻辑。您应该尝试将try catch逻辑移至ViewModel或至少控制器级别