我正在开发一个基于API的网站,客户端正在.Net MVC中开发。对于异常处理,我正在使用
public void Application_Error(object sender, EventArgs e)
{
string action = "Index";
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
if (httpException != null)
{
switch (httpException.GetHttpCode())
{
case 404:
// page not found
action = "Error404";
break;
default:
action = "Index";
break;
}
// clear error on server
Server.ClearError();
}
Response.Redirect(String.Format("/error/{0}", action));
}
因此,对于来自Controller的try catch抛出的任何异常,页面会重定向到错误页面。
现在我希望当会话过期时它应该重定向到Login页面,我该怎么做?
现在发生的事情是,在会话到期后,当我尝试访问会话值时,它会抛出异常“object reference not set to an instance of object
”。然后它会重定向到默认的错误页面。
答案 0 :(得分:2)
我认为你不能在通用异常处理程序中执行此操作,因为 - 如您所说 - 缺少会话变量只需抛出NullReferenceException
。从控制器对会话变量执行空检查:
Public ActionResult MyAction ()
{
if (Session["myVariable"] == null)
{
RedirectToAction("SessionTimeOut", "Error");
}
...
}
如果会话变量应始终存在,除非会话已过期,您可以尝试覆盖控制器的OnActionExecuting
方法并在那里执行空检查。要为多个控制器执行此操作,请定义BaseController
,覆盖其OnActionExecuting
方法,然后在其他控制器中继承此方法。