我有一些基本代码来确定我的MVC应用程序中的错误。目前在我的项目,我有一个名为控制器Error
与操作方法HTTPError404()
,HTTPError500()
和General()
。它们都接受一个字符串参数error
。使用或修改下面的代码。将数据传递到错误控制器进行处理的最佳/正确方法是什么?我想有一个尽可能强大的解决方案。
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
if (httpException != null)
{
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
switch (httpException.GetHttpCode())
{
case 404:
// page not found
routeData.Values.Add("action", "HttpError404");
break;
case 500:
// server error
routeData.Values.Add("action", "HttpError500");
break;
default:
routeData.Values.Add("action", "General");
break;
}
routeData.Values.Add("error", exception);
// clear error on server
Server.ClearError();
// at this point how to properly pass route data to error controller?
}
}
无需为此创建新路由,您只需重定向到控制器/操作并通过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/HttpError404
public ActionResult HttpError404(string message) {
return View("SomeView", message);
}
您的方法需要权衡取舍。在这种错误处理中循环时要非常小心。另一件事是,由于要通过asp.net管道来处理404,因此将为所有这些匹配创建会话对象。对于频繁使用的系统,这可能是一个问题(性能)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句