【发布时间】:2014-05-23 22:30:06
【问题描述】:
如果我提交这样的网址:
localhost:38245/TeamWork/Group/1/LONG-COMMENT-POSTED-BY-USER,
我收到一条错误消息,显示“错误请求 - 无效 URL HTTP 错误 400。请求 URL 无效。” ?
【问题讨论】:
标签: razor webmatrix http-status-code-400
如果我提交这样的网址:
localhost:38245/TeamWork/Group/1/LONG-COMMENT-POSTED-BY-USER,
我收到一条错误消息,显示“错误请求 - 无效 URL HTTP 错误 400。请求 URL 无效。” ?
【问题讨论】:
标签: razor webmatrix http-status-code-400
在 IIS 中 URL 的默认最大长度为 4096。您很可能违反了用户发布的评论。通常,传输此类数据的最佳方式是通过 POST 而不是 URL。您可以在 IIS 配置的 requestLimits 部分中将评论修剪为更合适的大小以增加 maxUrl 值:http://msdn.microsoft.com/en-us/library/ms689462%28v=vs.90%29.aspx
【讨论】:
首先,HTTP 400 错误适用于客户端出错的情况。正如您自己注意到的那样,这是一个糟糕的请求错误。这意味着可能由于语法错误,请求无法执行。正如 Mike Brind 所提到的,您很可能超出了 URL 的最大长度(无论如何都是默认值)
其次,您为什么要尝试通过 URL“提交”长帖子?请改用 POST 方法。一种方法是使用 Jquery 的 Post 方法来执行此操作。见this。或者只是通过 OnClick 方法调用表单的提交方法,或者用户正在提交表单。
POST 非常适合传输大量数据。所以从客户端提交数据,目前最简单的方法是使用 POST 来归档它。
【讨论】:
正如您在问题代码部分中所说的那样,
localhost:38245/TeamWork/Group/1/LONG-COMMENT-POSTED-BY-USER
用户的长评论必须在您网站的web.config 文件中的限制范围内。
其次,没有服务器会允许一个非常长的 URL 认为用户可能试图发布恶意软件。此外,使用短 URL 有利于数据传输,因为它们消耗的数据更少。
从 Requests 的限制中可以很容易地理解 URL 必须小于 4096 字节,只有 4KB。那么你认为所有的 URL 都是 4KB 吗?
由于 Mike 建议使用 POST 请求来发送长数据,我也建议您使用 HttpPost 请求来发送这种类型的长数据。这样,浏览器将加密数据并将其作为请求的附件发送。
【讨论】: