Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery OnActionExecuting事件未返回jsonResult_Jquery_Ajax_Json_Asp.net Mvc 5 - Fatal编程技术网

Jquery OnActionExecuting事件未返回jsonResult

Jquery OnActionExecuting事件未返回jsonResult,jquery,ajax,json,asp.net-mvc-5,Jquery,Ajax,Json,Asp.net Mvc 5,我已经创建了一个ActionFilterAttribute,它在允许处理MVC控制器get/post请求之前验证帐户是否可供处理。如果帐户不可用,我想向客户端返回一个错误。如果请求是ajax帖子,我希望在响应中包含json数据。出于某种原因,只有当浏览器和网站在同一台机器上运行时,json数据才会返回到浏览器。如果我在另一台机器上浏览该网站并执行ajax post,则响应内容类型将返回为“text/html”。但是,如果浏览器与网站在同一台机器上运行,则响应内容类型将正确返回为“applicat

我已经创建了一个ActionFilterAttribute,它在允许处理MVC控制器get/post请求之前验证帐户是否可供处理。如果帐户不可用,我想向客户端返回一个错误。如果请求是ajax帖子,我希望在响应中包含json数据。出于某种原因,只有当浏览器和网站在同一台机器上运行时,json数据才会返回到浏览器。如果我在另一台机器上浏览该网站并执行ajax post,则响应内容类型将返回为“text/html”。但是,如果浏览器与网站在同一台机器上运行,则响应内容类型将正确返回为“application/json”

我做错了什么

ActionFilterAttribute

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);

    if (filterContext.Result == null)
    {
        if (IsAccountUnavailable(Key))
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Conflict;
                filterContext.HttpContext.Response.ContentType = "application/json";
                filterContext.Result = new JsonResult
                {
                    Data = new {Error = "Unavailable", Url = GetLogOffUrl()},
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }
          else
                filterContext.Result = new RedirectResult(GetLogOffUrl());
        }
    }
}
jqueryajaxpost

$.ajax({
    url: window.location.href,
    type: 'POST',
    data: JSON.stringify(ko.mapping.toJS(serverModel.SelectionsViewModel)),
    contentType: "application/json; charset=utf-8",
    dataType: 'json'
})
    .done(function (data) {
        if (data.isValid)
            window.location.href = serverModel.NextView();
        else
            showGenericSaveError();
    })
    .fail(function (jqXhr) {
        handleAjaxError(jqXhr);
    });
};

感谢一位同事发现了下面的帖子,我的问题已经解决了。我需要设置Response.tryskipiiscustomerors=true

工作代码

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);

    if (filterContext.Result == null)
    {
        if (QuoteServiceLayer.IsAccountUnavailable(AccountKey, EnrollmentPeriodType, EmployeeKey))
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Conflict;
                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
                filterContext.Result = new JsonResult
                {
                    Data = new {Error = "Unavailable", Url = GetLogOffUrl()},
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }
        else
            filterContext.Result = new RedirectResult(GetLogOffUrl());
        }
    }
}

感谢一位同事发现了下面的帖子,我的问题已经解决了。我需要设置Response.tryskipiiscustomerors=true

工作代码

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);

    if (filterContext.Result == null)
    {
        if (QuoteServiceLayer.IsAccountUnavailable(AccountKey, EnrollmentPeriodType, EmployeeKey))
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Conflict;
                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
                filterContext.Result = new JsonResult
                {
                    Data = new {Error = "Unavailable", Url = GetLogOffUrl()},
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }
        else
            filterContext.Result = new RedirectResult(GetLogOffUrl());
        }
    }
}