将“Unauthenticated”消息从控制器操作返回到Ajax请求对象的最佳方法是什么?

时间:2010-01-14 12:34:53

标签: c# ajax model-view-controller

我有一个严重依赖Ajax的C#MVC应用程序。我使用的是Ext JavaScript框架,但这并不重要。

如果登录的用户在页面上并且他们的会话超时,我需要告知用户这是在他们下一个Ajax请求时发生的。

例如,有一个组合框可以自动搜索并显示结果。如果会话超时并且他们在此框中输入信息,则会向服务器发布Ajax请求。在执行操作之前,我想确定他们没有登录并在JSON对象中返回一条消息,详细说明失败的原因,以便我可以创建弹出或重定向。

对于奖励积分,如果我不必在300左右的动作中实施此解决方案,那将会更容易。类或方法的属性将是一个很好的解决方案,并且与我目前对非Ajax'GET'请求的内容一致。

1 个答案:

答案 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形式出现。