2012-01-04 18 views
3

私はMVC/ajaxプロジェクトのプログラマであり、顧客から多大なトラフィックを受け取ります。私たちは、クライアントからパラメータを受け取らないコントローラアクションの1つまたは2つの独立したインスタンス(1日あたり)を見てきました。ナビゲーション中のjQuery ajax呼び出しのMVCアクションのヌルパラメータ

短いストーリー:アクションがjQuery ajax経由で呼び出されており、アクションパラメータは、ブラウザが別のページにナビゲートしている間にajax呼び出しが行われた場合のみnullになります。 IEはリンクをクリックしてから、ajax呼び出しをトリガーします。

私は実際にajaxデータにnullを渡していないことを確認するために、これらの呼び出しの回りにいくつかの粗い検証を追加しましたが、これは問題を緩和しません。そのうちの1つの例を以下に示します。

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

私はIEが他のブラウザとは異なるこのような状況に対処可能性が示唆 an old IEBlog postを見つけました。他の誰かがこの現象に遭遇したかどうかについて私は興味がありました。繰り返しますが、私はこの問題をIEでのみ、ページの移動中にしか再現できません。

編集:それは何らかの理由でアクティブフィドラーでこの例外を再現することは困難であるが、私はバイオリンを管理するときには、次のエラーメッセージが表示されます。

フィドラーは、セッション#4におけるプロトコル違反を検出しました。 Content-Length Mismatch:要求ヘッダーは24バイトを示しましたが、クライアントは0バイトを送信しました。フィドラーを使用

+1

こんにちは@あなたはこの問題を解決したことがありますか?私はまったく同じ問題を経験しているので、あなたが持っているすべてのポインタに感謝します。乾杯。 –

+1

OnAuthorizationをオーバーロードし、手動でこれが発生したケースを検出しました。リクエストがajaxリクエストであるかどうか、コンテンツがコンテンツの長さと一致するかどうかを確認しました。これは理想的ではありませんが、機能します。 – Will

答えて

2

、私は非常にまれなインスタンスでこれを再現することが可能であり、それはコンテンツの長さの不一致(それはそれが発生したときに表示さフィドラーエラーメッセージである)として扱うことができることに気づきました。具体的には、サーバー側では、要求コンテンツの長さが実際の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); 
    } 
関連する問題