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

ASP.NET MVC SqlException does not redirect to error page

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

我的网页是这样工作的:

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

  2. View 呈现 html 代码,然后启动 jQuery ajax 执行另一个带有 JsonResult

    的控制器方法
  3. 在这个控制器方法中,通过使用 SqlClient

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

    An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

    Additional information: Cannot find stored produre "dbo.NonExistingProcedureName".

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

Event Type Event Time Duration Thread Detail Description

ASP.NET (Activated)
Redirect to "/error/serverError?aspxerrorpath=/dash/jObject" 11.16s [24128]
Worker Thread
...

ASP.NET GET "/error/serverError" 11.16s [24128] Worker Thread

...但是重定向并没有真正完成,用户仍然查看导致错误的页面。

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

如果我没看错,您的 500 错误出现在 ajax 请求中。如果是这种情况,则会返回错误页面,但不会呈现。如果您在浏览器中的开发工具中查看失败的 ajax 请求的响应,您将看到错误页面。 ajax 的全部优点是您不必 post 返回整个表单,这样您就可以只呈现要更新的部分。因此,如果您想重定向到另一个页面,则需要在 javascript.

中进行处理

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

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