Asp.net mvc IsAjaxRequest总是返回false
我对Ajax请求和重定向有问题。我尝试创建自定义授权属性,如下所示:Asp.net mvc IsAjaxRequest总是返回false,asp.net-mvc,jquery,Asp.net Mvc,Jquery,我对Ajax请求和重定向有问题。我尝试创建自定义授权属性,如下所示: [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class MyAuthorizeAttribute : AuthorizeAttribute public override void OnAuthorization(AuthorizationContext filterContext) { base.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAuthorizeAttribute : AuthorizeAttribute
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result == null || (filterContext.Result.GetType() != typeof(HttpUnauthorizedResult)
|| !filterContext.HttpContext.Request.IsAjaxRequest()))
return;
var redirectToUrl = "/login?returnUrl=" + filterContext.HttpContext.Request.UrlReferrer.PathAndQuery;
filterContext.Result = (filterContext.HttpContext.Request.ContentType == "application/json"
? (ActionResult)
new JsonResult
{
Data = new { RedirectTo = redirectToUrl },
ContentEncoding = System.Text.Encoding.UTF8,
JsonRequestBehavior = JsonRequestBehavior.DenyGet
}
: new ContentResult
{
Content = redirectToUrl,
ContentEncoding = System.Text.Encoding.UTF8,
ContentType = "text/html"
});
//Important: Cannot set 401 as asp.net intercepts and returns login page
//so instead set 530 User access denied
filterContext.HttpContext.Response.StatusCode = 530; //User Access Denied
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
}
但是在我的应用程序中,isAjaxRequest()总是错误的。甚至当我从jquery.ajax()调用操作时
编辑:包括建议的ajax调用。
我的一些ajax调用是由jqGrid组件进行的。数据类型设置为JSON,类型为POST。控制器具有HTTPPost装饰。其中一些是直接的jquery ajax调用,如下所示:
$("#clientList").change(function () {
var client = $("#clientList").val();
$.ajax({
url: "myurl",
data: { 'client': client },
cache: false,
traditional: true,
type: 'POST',
success: function (data) {
<do something here>
}
});
});
$(“#客户端列表”).change(函数(){
var client=$(“#clientList”).val();
$.ajax({
url:“我的url”,
数据:{'client':client},
cache:false,
传统的:是的,
键入:“POST”,
成功:功能(数据){
}
});
});
这里出现了很多类似的问题:这两个问题中有谁能给你答案吗?@faust,我已经看过几乎所有类似的问题,但都没有帮助。因此,我在谷歌搜索这个链接时得到了上面的代码。我在authorize属性中尝试了几种类似的方法,但仍然无法使其正常工作。使用MVC3,jquery1.6.4,对jquery进行正确的脚本调用。我正在使用jquery的.ajax()方法调用控制器操作。您是否尝试更改jquery.ajax()
调用的选项,例如type(post vs get)?发布您的jquery可能会帮助某人找到答案。isAjaxRequest检查请求头中的X-request-Wit
h()此帖子:告诉您如何检查jqueryajax()发送的头。我将检查这些标题。