MVC在超时上创建URL返回原始页面

时间:2014-01-15 12:44:06

标签: asp.net-mvc

在我的Controller我有一个帮助我检查任何Session超时的功能,这样可以正常工作,并将用户引导至错误页面。不幸的是,从这里我真的可以选择回到主页,我想要的是创建功能,让他们回到上一页。

每个页面都会在查询字符串中附加一个ID形式(这并不总是称为ID,但它始终是识别对象的唯一编号。

我需要的是尝试获取此ID(始终是第一个参数/键)并将其用作在视图上创建ActionLink的基础。我可以使用包含请求原始网址的RawUrl来获取ActionExecutedContext,但我不确定如何实现此功能。

以下是在我的Action之后执行的代码,它验证用户是否已超时并将其移至错误页面。 ErrorId为-1001只是为了确定这是一个超时。我需要的是一个ID,类似于我在RawUrl属性中可以看到的ID,我可以将其用作RedirectToAction的一部分,将用户带回原始页面。

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.HttpContext.Session != null)
{
if (filterContext.HttpContext.Session.IsNewSession)
{
string cookie = filterContext.HttpContext.Request.Headers["Cookie"];
if ((cookie != null) && (cookie.IndexOf("ASP.NET_SessionId") >= 0))
{
filterContext.Result = RedirectToAction("Error", new { errorId = -1001, errorMessage ="Your session has timed out.Please restart the application or click 'Home' below."});
return;
}
}
base.OnActionExecuted(filterContext);
}
}

1 个答案:

答案 0 :(得分:2)

  

...它会将用户引导至错误页面。

将此重定向传递为查询字符串参数a ReturnUrl时。此参数将是当前请求网址。

然后在错误页面中,您将能够使用此ReturnUrl查询字符串参数来构建指向最初请求的资源的锚点或表单。例如:

<a href="@Request["ReturnUrl"]">Go back</a>