【问题标题】:How to handle UnauthorizedRequest via Ajax call in Asp.net MVC2如何在 Asp.net MVC2 中通过 Ajax 调用处理 UnauthorizedRequest
【发布时间】:2010-07-27 09:56:30
【问题描述】:

简介:

我的框架中有一个子类 AuthorizeAttribute,我在其中进行自定义授权。

我正在从普通的 asp.net mvc 视图渲染切换到通过 jQuery 进行的 Ajax 渲染。因此,应用程序中的每个链接都会调用 ajax 来获取数据。

为了解决这个问题,我将大部分页面转换为部分视图,以便每个 ajax 请求只获取页面上需要更新的部分。

在正常视图呈现期间,当请求未经授权时,它会被重定向到 web.config 中描述的登录页面。转换为 Ajax 后,情况有些不同,因为我不希望在 ajax 请求中使用登录页面的标记,但希望在其中有结构化的响应,以便我可以在 ajax 调用中采取相应的行动。

为了做到这一点,我相信我必须重写子类 AuthorizeAttribute 类中的 HandleUnauthorizedRequest 方法,并将 filterContext.Result 设置为 json 结果。但是在这样做时,我将如何区分未经授权的请求和成功的请求,因为从 ajax 调用的角度来看,两者都是成功的响应;因此将在成功处理程序中处理。

处理这个问题的正确方法是什么?

【问题讨论】:

    标签: asp.net-mvc-2 jquery


    【解决方案1】:

    我刚刚想通了,我可以在HandleUnauthorized中过滤普通请求和ajax请求 我在 AuthorizeAttribute 子类中覆盖的请求方法。这样,对于 ajax 请求,我可以为此创建一个 json 结果或其他内容,而对于普通请求,它仍然会显示登录页面。代码如下:

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
            {
                JsonResult UnauthorizedResult = new JsonResult();
                UnauthorizedResult.Data = "{ request : 'unauthorized' }";
                UnauthorizedResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                filterContext.Result = UnauthorizedResult;
            }
            else
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
        }
    

    我仍然不会将我的问题标记为已解决,因此如果有人可以提出更好的方法,我仍然愿意接受建议。

    【讨论】:

    • 好吧,这在会话期间运行良好,一旦会话到期,登录页面就会再次发送,作为对状态为成功的 ajax 请求的响应。因此,我将不得不做一些事情来检测会话已过期,有没有人有任何建议?
    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多