无需为此创建新路由,您只需重定向到控制器/ *** 作并通过querystring传递信息即可。例如:
protected void Application_Error(object sender, EventArgs e) { Exception exception = Server.GetLastError(); Response.Clear(); HttpException httpException = exception as HttpException; if (httpException != null) { string action; switch (httpException.GetHttpCode()) { case 404: // page not found action = "HttpError404"; break; case 500: // server error action = "HttpError500"; break; default: action = "General"; break; } // clear error on server Server.ClearError(); Response.Redirect(String.Format("~/Error/{0}/?message={1}", action, exception.Message)); }
然后,您的控制器将收到您想要的任何东西:
// GET: /Error/HttpError404public ActionResult HttpError404(string message) { return View("SomeView", message);}
您的方法需要权衡取舍。在这种错误处理中循环时要非常小心。另一件事是,由于要通过asp.net管道来处理404,因此将为所有这些匹配创建会话对象。对于频繁使用的系统,这可能是一个问题(性能)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)