///
///全局错误///
///
///
protected void Application_Error(objectsender, EventArgs e)
{
Exception ex=Server.GetLastError();
LogHelper.Error(ex);//记录错误日志(NLog 挺好用的(* ̄︶ ̄))
if (Context.Handler == null)
{return;
}if (newHttpRequestWrapper(Request).IsAjaxRequest())
{
Response.Clear();
Response.ContentType= "application/json; charset=utf-8";
Response.Write("{"state":"0","msg":"" + ex.Message + ""}");
Response.Flush();
Response.End();
}else{//方案一 重定向到错误页面,带上简单的错误信息//string errurl = "/Error/Error?msg=" + ex.Message;//Response.Redirect(errurl, true);//方案二 带上错误对象,转到错误页
Response.Clear();
RouteData routeData = new RouteData();
routeData.Values.Add("Controller", "Shared"); // 已有的错误控制器
routeData.Values.Add("Action", "Error"); // 自定义的错误页面
Server.ClearError();
SharedController controller = new SharedController(); // 自定义错误页面控制器
string errController = Request.RequestContext.RouteData.Values["Controller"].ToString();
string errAction = Request.RequestContext.RouteData.Values["Action"].ToString();
HandleErrorInfo handleErrorInfo = new HandleErrorInfo(ex, errController, errAction);
controller.ViewData.Model = handleErrorInfo; //传错误信息
RequestContext requestContext = new RequestContext(new HttpContextWrapper(Context), routeData); // 封装与已定义路由匹配的HTTP请求的信息
((IController)controller).Execute(requestContext); //执行上下文请求
Response.End();
}
}