如何为ASP.NET MVC3创建一个全局的自定义错误页面?

23 浏览
0 Comments

如何为ASP.NET MVC3创建一个全局的自定义错误页面?

我是全新接触ASP.NET MVC3的。我该如何创建一个全局自定义错误页面呢?总的想法是当出现异常时,向用户显示一个通用的消息,并将异常记录到数据库中,以便开发人员以后进行调查。

非常感谢您的帮助。

这是我在global.asax.cs中的解决方案:

protected void Application_Error()

{

var exception = Server.GetLastError();

Log.Error("Exception", exception);

var httpException = exception as HttpException;

Response.Clear();

Server.ClearError();

var routeData = new RouteData();

routeData.Values["controller"] = "Error";

routeData.Values["action"] = "General";

routeData.Values["exception"] = exception;

Response.StatusCode = 500;

if (httpException != null)

{

Response.StatusCode = httpException.GetHttpCode();

switch (Response.StatusCode)

{

case 403:

routeData.Values["action"] = "Http403";

break;

case 404:

routeData.Values["action"] = "Http404";

break;

}

}

IController errorsController = new ErrorController();

var rc = new RequestContext(new HttpContextWrapper(Context), routeData);

errorsController.Execute(rc);

}

0
0 Comments

在ASP.NET MVC3中创建全局自定义错误页面的方法

在我的项目中,我创建了一个BaseController并重写了OnException事件,代码如下:

protected override void OnException(ExceptionContext filterContext)
{
    // 使用log4net进行日志记录,或者使用ELMAH进行信号处理
    filterContext.ExceptionHandled = true;
    var exModel = new HandleErrorInfo(filterContext.Exception,  
                  filterContext.RouteData.Values["controller"].ToString(), 
                  filterContext.RouteData.Values["action"].ToString());
    View("Error", exModel).ExecuteResult(ControllerContext);
}

此外,我还移除了Global.asax.cs中注册的HandleError action filter。

注意:你应该在shared文件夹中有一个名为Error的视图。

更新:为了从Error视图中提取错误信息,你需要将Error视图绑定到HandleErrorInfo模型。

System.Web.Mvc.HandleErrorInfo

然后你可以在视图中的任何位置轻松访问异常:

.Exception

这真的很有趣。我该如何从视图中提取异常并显示它?

0
0 Comments

在ASP.NET MVC3中,我们如何创建一个全局的自定义错误页面?

问题的出现原因:

在ASP.NET MVC3中,默认情况下,当发生未处理的异常时,系统会自动显示一个包含异常信息的错误页面。但是,这个错误页面可能不符合我们的需求,我们可能希望显示一个自定义的错误页面来提供更好的用户体验。因此,我们需要找到一种方法来创建一个全局的自定义错误页面。

解决方法:

1. 首先,在Views\Shared文件夹中创建一个名为Error的视图页面。这个视图页面将用于显示自定义的错误信息。

2. 在捕获异常的代码块中,先记录错误日志,然后将操作重定向到Error视图页面。可以使用下面的代码来实现重定向:

catch (Exception ex)
{
    // 记录错误日志
    // ...
    // 重定向到Error视图页面
    return RedirectToAction("Error", "Shared");
}

3. 如果你希望显示更复杂的错误信息,你可以创建一个Error模型,并将其传递给Error视图页面。或者,你也可以将错误信息放入ViewBag中,在视图页面中进行访问和显示。

除了上述方法外,如果你想了解关于未处理异常和HTTP错误的更多信息,可以参考Ropstah的帖子。

0
0 Comments

问题的原因是在ASP.NET MVC3中,没有默认的全局自定义错误页面。解决方法是在Global.asax文件中实现Application_Error方法来处理错误。实现的代码如下:

protected void Application_Error() { 
    HttpContext ctx = HttpContext.Current; 
    var error = ctx.Server.GetLastError();
    ctx.Response.Clear(); 
    ctx.Response.End(); 
}

同时,可以参考Error Handling in asp.net mvc 3来了解更多关于错误处理的信息。但需要注意的是,这种方法只能处理未处理的异常或HTTP错误,如404、500等。为了处理更具体的错误,可以根据需要在Application_Error方法中添加适当的代码。

0