我有一个混合(使用 MVC 和经典 ASP 页面)ASP(C#)网络应用程序,需要为 MVC 和遗留代码实现常见的错误处理;也就是说,我必须检测无效的 URL 并将无效请求重新路由到主页或登录页面(取决于用户是否登录)。
我在“Application_Error”中添加了错误处理代码(参见下面的代码)。
问题如下:登录用户 ID 保存在 Session 对象中,对于某些无效 URL,会话对象变为 null:“会话状态在此上下文中不可用”
例如:
对于以下 URL,存在 Session 对象:
1. http://myserver:49589/test/home/index
2. http://myserver:49589/test/home/in
3. http://myserver:49589/test/ho
但对于以下 URL,会话对象为空:
4. http://myserver:49589/te
所以,问题是当我在请求中拼错文件夹名称时,为什么会话对象变为空,以及如何解决这个问题。
路由图如下:
context.MapRoute(
"default",
"test/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
if (httpException != null) // Http Exception
{
switch (httpException.GetHttpCode())
{
case 400: // Bad Request
case 404: // Page Not Found
case 500: // Internal Server Error
{
// Clear the error on server.
Server.ClearError();
ServerConfiguration scfg = ServerConfiguration.Instance;
if (ConnxtGen.App.AppUtility.GetCurrentUserID() != -1)
{
Response.RedirectToRoute("Unity_default", new { controller = "Home", action = "Index" });
}
else
{
Response.Redirect(scfg.PagePath + "/login/login.aspx", false);
}
break;
}
default:
{
break;
}
}
}
// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;
}