我有一个严重依赖Ajax的C#MVC应用程序。我使用的是Ext JavaScript框架,但这并不重要。
如果登录的用户在页面上并且他们的会话超时,我需要告知用户这是在他们下一个Ajax请求时发生的。
例如,有一个组合框可以自动搜索并显示结果。如果会话超时并且他们在此框中输入信息,则会向服务器发布Ajax请求。在执行操作之前,我想确定他们没有登录并在JSON对象中返回一条消息,详细说明失败的原因,以便我可以创建弹出或重定向。
对于奖励积分,如果我不必在300左右的动作中实施此解决方案,那将会更容易。类或方法的属性将是一个很好的解决方案,并且与我目前对非Ajax'GET'请求的内容一致。
答案 0 :(得分:0)
这是我提出的解决方案
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
sealed public class RedirectIfUserNotLoggedOnAttribute : ActionFilterAttribute
{
public override void OnActionExecuting (ActionExecutingContext filterContext)
{
if (!IsUserLoggedOn)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "User",
action = "WarnLogOutAsJson",
}));
}
}
}
您指定的控制器操作应返回JsonResult。
当然,您需要为GET请求或任何其他请求创建一个不同的属性,其中响应未以Json形式出现。