【问题标题】:Null parameters in MVC action from jQuery ajax call during navigation (IE only)导航期间来自 jQuery ajax 调用的 MVC 操作中的空参数(仅限 IE)
【发布时间】:2012-01-04 19:31:07
【问题描述】:

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

长话短说:这些动作是通过 jQuery ajax 调用的,并且只有在浏览器导航到另一个页面时进行 ajax 调用时,动作参数才为空。 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");

我发现an old IEBlog post 表明 IE 可能会以不同于其他浏览器的方式处理这种情况。我很好奇以前是否有其他人遇到过这种现象。同样,我只能在 IE 中重现此问题,并且只能在页面导航期间重现。

编辑:由于某种原因,在 Fiddler 处于活动状态时很难重现此异常,但是当我设法 Fiddler 时显示以下错误消息:

Fiddler 在会话 #4 中检测到协议违规。 Content-Length mismatch: Request Header 指示 24 字节,但客户端发送了 0 字节。

【问题讨论】:

  • 嗨@Will,你有没有找到解决这个问题的办法?我遇到了完全相同的问题,因此将不胜感激您的任何指示。干杯。
  • 我们覆盖了 OnAuthorization 并手动检测了发生这种情况的情况。我们专门检查了请求是否是ajax请求,然后内容是否匹配内容长度。这并不理想,但它确实有效。

标签: model-view-controller internet-explorer jquery


【解决方案1】:

使用 Fiddler,我能够在非常罕见的情况下重现这一点,并意识到它可以被视为内容长度不匹配(即 fiddler 在发生时显示的错误消息)。具体来说,在服务器端,请求内容的长度将与实际的 Form/InputStream 内容不匹配。我们覆盖了 OnAuthorization 以手动检测和处理这种情况。

    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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2016-01-17
    • 2017-10-18
    • 2016-03-12
    • 1970-01-01
    • 2011-01-01
    • 2021-05-21
    相关资源
    最近更新 更多