在asp.net mvc中使用表单身份验证时,我发现如何将ajax请求重定向到登录页面有点麻烦。
在OnAuthorize方法中,我知道请求需要授权。如果由于超时等原因删除了cookie,我想将用户重定向到登录页面。但通常请求是由jquery通过ajax请求触发的。所以请求返回登录页面的html。
那么如何将用户重定向到ajax请求的登录页面?有什么想法吗?
答案 0 :(得分:3)
你可以编写一个自定义authorize属性来测试请求是否是一个AJAX请求,如果是,则返回一个包含要重定向到的url的JSON:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
// It was an AJAX request => no need to redirect
// to the login url, just return a JSON object
// pointing to this url so that the redirect is done
// on the client
filterContext.Result = new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { redirectTo = FormsAuthentication.LoginUrl }
};
}
else
{
// standard request => redirect
base.HandleUnauthorizedRequest(filterContext);
}
}
}
然后当你发出AJAX请求时:
$.get('/foo', function(result) {
if (result.redirectTo) {
window.location.href = result.redirectTo;
} else {
// standard stuff
}
});
当然为了避免在每个AJAX调用中重复这个,你可以使用.ajaxComplete()
处理程序。