将值传递给ASP.NET MVC中的自定义错误页面

时间:2015-03-12 01:12:54

标签: asp.net asp.net-mvc

我想将标识符传递给ASP.NET MVC中的自定义错误页面。

我将web.config设置为在状态500错误时重定向到错误页面。我不知道如何从抛出异常的应用程序代码中传递错误ID(也将HTTP状态设置为500)回到配置的错误页面。

如果我只使用Status 200并从控制器的Error方法返回一个视图并在那里完成所有逻辑,那么很容易,但是状态代码必须是500,所以这不是一个可接受的解决方案。

我也不会也不会使用会话。我想使用查询字符串或查看数据。

不重复。这是关于错误处理(状态代码500)和异常。 404是关于Page Not Found

1 个答案:

答案 0 :(得分:2)

我不知道更好的方法来自定义信息到web.config中配置的错误页面。当我需要错误重定向时,这就是我通常所做的事情:

我将创建一个错误处理程序操作过滤器:

public class MyErrorHandler: HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext.Exception != null)
        {
            filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            filterContext.ExceptionHandled = true;
            filterContext.Result = new RedirectResult("/error?error_id=123456", true);
            return;
        }
        base.OnException(filterContext);
    }
}

在异常过滤器中,您可能会尝试使用不同的错误ID处理不同的错误,或者您希望更改异常的任何内容。

然后将其应用于控制器或控制器类:

[MyErrorHandler]
public class HomeController : Controller
{
    ....
}

您将获得Http状态500并将被重定向到:

http://<host>/error?error_id=123456