ASP.NET MVC SqlException不会重定向到错误页面

时间:2018-07-05 07:17:46

标签: c# redirect error-handling asp.net-mvc-5 sqlexception

我希望如果发生错误(例如,我输入了错误的网站页面地址),则用户将被重定向到相关的错误页面(在本例中为404)。但是对于错误类型500(内部服务器错误),我在VS Log中看到了重定向,但是用户停留在同一页面上,这导致了错误。

这是我的网页的工作方式:

  1. 当用户打开网页时,将执行控制器的ActionResult方法并返回View();

  2. View呈现html代码,然后启动jQuery ajax,后者使用JsonResult

  3. 执行另一个控制器方法
  4. 在此控制器方法中,通过使用SqlClient

  5. 的静态类方法准备并执行SQL查询。
  6. 在静态类方法中,我得到一个SqlException(例如,我尝试执行不存在的过程):

      

    System.Data.dll中发生类型为'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理

         

    其他信息:找不到存储的产品“ dbo.NonExistingProcedureName”。

我希望在这种情况下,用户将被重定向到500错误页面,并且在VS日志中看到了重定向:

  

事件类型事件持续时间线程详细说明

     

ASP.NET(已激活)
  重定向到“ / error / serverError?aspxerrorpath = / dash / jObject” 11.16s [24128]
  工作者线程
  ...

     

ASP.NET GET“ / error / serverError” 11.16s [24128]   工作者线程

...但是重定向实际上并未完成,用户仍在查看导致错误的页面。

那么,为什么重定向到错误页面不能按预期工作?

1 个答案:

答案 0 :(得分:1)

如果我正确阅读了此内容,则ajax请求中发生了500错误。如果是这种情况,那么将返回错误页面,但不会呈现。如果您在浏览器中的开发工具中查看失败的ajax请求的响应,则会看到错误页面。 Ajax的全部优点是您不必回发整个表单,而只允许呈现要更新的部分。因此,如果要重定向到另一个页面,则需要使用javascript处理。

最好在ajax errorstatusCode回调中捕获错误,然后通过javascript重定向到相关的错误页面。像...

$.ajax({
statusCode: {
    500: function() {
      alert("fudged up");
    }
  }
});