0

正如标题所说,在我的 MVC3 应用程序中,我正在向控制器发送 POST 请求并收到 400 错误。

该请求包含一个 id,控制器使用该 id 检索文件的内容并在响应中将其发回。

我阅读了一些相关的 stackoverflow 帖子,这些帖子表明它可能是由我正在使用的硬编码 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 Bad Request Exception ”:

任何单独的路径段(不包括协议、服务器名称和查询字符串的 URL 部分,例如 http://a.com/b/c?d=e,这里 b 和 c 是单独的路径) 不得超过 260 个字符。http.sys 也不允许包含超过 255 个路径段的 URL。

我相信您的 id 被解释为路径段,因此会发生此 400 响应。您配置的maxUrlLength仅用于总 url 长度,而不是其中的一部分。

编辑:有一个简单的解决方法。将您的网址更改为:

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

注意?id=. 这将改变您的 id 在 ASP.NET 内部解析的方式,它不会被视为路径段。

于 2013-02-18T20:45:03.423 回答