简介:
我的框架中有一个子类的AuthorizeAttribute,我正在进行自定义授权。
我正在通过jQuery从普通的asp.net mvc视图渲染切换到Ajax渲染。因此,应用程序中的每个链接都会进行ajax调用以获取数据。
为了满足这一需求,我将大部分页面转换为部分视图,以便每个ajax请求只获取需要在页面上更新的部分。
在请求未经授权的正常视图呈现期间,它被重定向到web.config中描述的登录页面。转换为Ajax之后,事情有点不同,因为我不想在ajax请求中使用登录页面的标记,但想要在其中进行结构化响应,以便我可以在ajax调用中做出相应的操作。
为了做到这一点,我相信我必须覆盖子类AuthorizeAttribute类中的HandleUnauthorizedRequest方法,并将filterContext.Result设置为json结果。但在这样做的过程中,我如何区分未经授权的请求和成功的请求,因为从ajax调用的角度来看,两者都是成功的响应;因此将在成功处理程序中处理。
处理这个问题的正确方法是什么?
答案 0 :(得分:7)
我刚想通了,我可以在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);
}
}
我仍然不会将我的问题标记为已解决,所以如果有人可以建议更好的方法,我仍然愿意接受建议。