Model view controller 导航期间来自jQuery ajax调用的MVC操作中的空参数(仅限IE)

Model view controller 导航期间来自jQuery ajax调用的MVC操作中的空参数(仅限IE),model-view-controller,internet-explorer,jquery,Model View Controller,Internet Explorer,Jquery,我是一名MVC/ajax项目的程序员,该项目从客户那里获得了大量流量。我们已经看到一个或两个控制器操作的独立实例(每天)没有从客户端接收参数 长话短说:操作是通过jQuery ajax调用的,只有在浏览器导航到另一个页面时进行ajax调用时,操作参数才为null。IE单击链接,然后触发ajax调用 我在这些调用周围添加了一些粗略的验证,以确保我们实际上没有在ajax数据中传递空值,这并没有缓解问题。下面是其中一个调用的示例 var searchValue = _txtSearch.val

我是一名MVC/ajax项目的程序员,该项目从客户那里获得了大量流量。我们已经看到一个或两个控制器操作的独立实例(每天)没有从客户端接收参数

长话短说:操作是通过jQuery ajax调用的,只有在浏览器导航到另一个页面时进行ajax调用时,操作参数才为null。IE单击链接,然后触发ajax调用

我在这些调用周围添加了一些粗略的验证,以确保我们实际上没有在ajax数据中传递空值,这并没有缓解问题。下面是其中一个调用的示例

    var searchValue = _txtSearch.val().trim();

    if (searchValue === null 
        || searchValue === undefined 
        || searchValue.length < _minimumLengthForSearch) {
        _txtSearch.focus();
        return;
    }
    // clear out the value when launching
    _txtSearch.val('');

    $.post(_quickSearchUrl,
        { searchString: searchValue },
        function (data) {...},
    "json");
var searchValue=\u txtSearch.val().trim();
如果(searchValue==null
||searchValue==未定义
||searchValue.length<\u搜索的最小长度){
_txtSearch.focus();
返回;
}
//启动时清除该值
_txtSearch.val(“”);
$.post(_quickSearchUrl,
{searchString:searchValue},
函数(数据){…},
“json”);
我发现IE可能会以不同于其他浏览器的方式处理这种情况。我很好奇以前是否有人遇到过这种现象。同样,我只能在IE中重现这个问题,并且只能在页面导航期间重现

编辑:由于某些原因,当Fiddler处于活动状态时,很难再现此异常,但当我成功编辑Fiddler时,会显示以下错误消息:

Fiddler在会话4中检测到协议冲突。
内容长度不匹配:请求头指示24个字节,但客户端发送了0个字节。

使用Fiddler,我能够在一个非常罕见的实例中重现这一点,并意识到它可以被视为内容长度不匹配(这是Fiddler在发生时显示的错误消息)。具体来说,在服务器端,请求内容长度将与实际表单/InputStream内容不匹配。我们超越授权,手动检测和处理此案例

    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        //Detect IE missing post data phenomenon
        var request = HttpContext.Request;
        if (request.IsAjaxRequest() == true && request.ContentLength > 0 
            && request.Form.HasKeys() == false && request.InputStream.Length == 0)
        {
            throw new ContentLengthMismatchException(string.Format("Content Length Mismatch in URL: {0}", request.Url));
        }

        base.OnAuthorization(filterContext);
    }

嗨,威尔,你有没有找到解决这个问题的办法?我遇到了完全相同的问题,所以如果您能给我一些建议,我将不胜感激。干杯。我们超越了授权,并手动检测到发生这种情况的案例。我们专门检查该请求是否为ajax请求,然后检查内容是否与内容长度匹配。这并不理想,但很有效。