gpt4 book ai didi

asp.net-mvc-2 - 如何在 Asp.net MVC2 中通过 Ajax 调用处理 UnauthorizedRequest

转载 作者:行者123 更新时间:2023-12-01 00:54:48 27 4
gpt4 key购买 nike

简介:

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

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

为了满足这一点,我已将大部分页面转换为部分 View ,以便每个 ajax 请求仅获取页面上需要更新的部分。

在正常 View 渲染期间,当请求未经授权时,它会被重定向到 web.config 中描述的登录页面。转换为 Ajax 后,事情有点不同,因为我不想要 ajax 请求中的登录页面标记,而是想要其中的结构化响应,以便我可以在 ajax 调用中采取相应的操作。

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

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

最佳答案

我刚刚想通了,我可以在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);
}
}

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

关于asp.net-mvc-2 - 如何在 Asp.net MVC2 中通过 Ajax 调用处理 UnauthorizedRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3339842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com