using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net;
namespace MvcApplication1
{
/// <summary>
/// 自定义404异常
/// </summary>
public class NotFoundException : Exception
{}
/// <summary>
/// 自定义500异常
/// </summary>
public class ServerException : Exception { }
public class CustomerizedErrorHandledAttribute: Attribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
HttpResponseBase resp = filterContext.RequestContext.HttpContext.Response;
//指定要跳转的路径页(必须全部在Shared下)
ViewResult vr = null;
if (filterContext.Exception is NotFoundException)
{
resp.StatusCode = 404;
vr = new ViewResult { ViewName = "404Error" };
}
else if (filterContext.Exception is ServerException)
{
resp.StatusCode = 500;
vr = new ViewResult { ViewName = "500Error" };
}
filterContext.ExceptionHandled = true;
filterContext.Result = vr;
}
}
}
protected void Application_EndRequest() 2 { 3 var statusCode = Context.Response.StatusCode; 4 var routingData = Context.Request.RequestContext.RouteData; 5 if (statusCode == 404 || statusCode == 500) 6 { 7 Response.Clear(); 8 var area = DataHelper.ConvertTo(routingData.DataTokens["area"], string.Empty); 9 if (area == "Admin") 10 { 11 Response.RedirectToRoute("Admin_Default", new { controller = "BackError", action = "NotFound", IsReload = 1 }); 12 } 13 else 14 { 15 Response.RedirectToRoute("Default", new { controller = "Error", action = "NotFound", id = UrlParameter.Optional }); 16 } 17 18 } 19 }