0

タイトルにあるように、MVC3アプリでは、POSTリクエストをコントローラーに送信し、400エラーが発生します。

要求には、コントローラーがファイルの内容を取得して応答で送り返すために使用するIDが含まれています。

私が使用していたハードコードされたURLが原因である可能性があることを示唆するいくつかの関連するスタックオーバーフローの投稿を読みましたが、それ以来、URLヘルパーを使用してこの問題が発生し続けています。

これが私のコントローラーです:

[HttpPost]
public ActionResult GetContent(string id)
{
    // Decrypt string to get filepath.
    string file = EncryptStrings.DecryptAESString(id);

    string content = String.Empty;

    if(System.IO.File.Exists(file))
    {
        content = System.IO.File.ReadAllText(file);
    }

    return Content(content);
}

私のjQueryコード:

function setContent(id) {
    $.post('@Url.Action("GetContent", "Content")/' + id, null,
        function (data) {
            $('#article').html(data);
            bringToFront('article-container');
    }, 'text');
}

そして、リクエストがどのように見えるかの例(長いリクエストを可能にするためにmaxUrlLengthを増やしました):

http://localhost/KBLite/Content/GetContent/545E55A34A5B6EE892286D481D177C149A003AAA0F44FAAD432970A9BADA5B79713344D2D80580DCA3345D520742E358A2089BF2E01EA553203AFCA27C96B4150923D33EC57D93F55241F9398D217E3B38609449CB64DCD2D2C31C850E5EBB452CC5A8F3B2F71D0B30E282D16F394FDC60696C3661372B1D200AE1B45371473DD7DC077BEAE475CD7D498F0AEDD63727

何かご意見は?

4

1 に答える 1

2

「400の不正な要求の例外を理解する」によると:

任意の個別のパスセグメント(プロトコル、サーバー名、クエリ文字列を含まないURLの部分、たとえば http://a.com/b/c?d=e、ここではbとcは個別のパスです) )は260文字を超えてはなりません。また、http.sysは、255を超えるパスセグメントを持つURLを許可していません。

あなたのIDはパスセグメントとして解釈されており、その結果、この400の応答が発生していると思います。構成したのmaxUrlLengthはURLの全長のみであり、その一部ではありません。

編集:これには簡単な修正があります。URLを次のように変更します。

http://localhost/KBLite/Content/GetContent?id=545E55A34A5B6EE892286D481D177C149A003AAA0F44FAAD432970A9BADA5B79713344D2D80580DCA3345D520742E358A2089BF2E01EA553203AFCA27C96B4150923D33EC57D93F55241F9398D217E3B38609449CB64DCD2D2C31C850E5EBB452CC5A8F3B2F71D0B30E282D16F394FDC60696C3661372B1D200AE1B45371473DD7DC077BEAE475CD7D498F0AEDD63727

に注意して?id=ください。これにより、ASP.NETでIDが内部的に解析される方法が変更され、パスセグメントとして扱われなくなります。

于 2013-02-18T20:45:03.423 に答える