当通过正文中的 HTTP-POST 和通过 HTTP-GET 作为查询参数传递时,DateTime 的解析不同
DateTime parses differently when passed via HTTP-POST in body and via HTTP-GET as query params
在我们的 MVC 3 Web 应用程序中,我们使用当前用户的首选项定义 Thread.CurrentThread.CurrentCulture
。但是,在一个视图中,我们始终以 mm/dd/yyyy
格式通过 Ajax 提交数据,只要用户的文化是 en_US
,这就可以正常工作。 (显然)
令人惊讶的是,当我们将它作为 HTTP-POST 传递时,它对所有用户都有效,但当我们将它作为 HTTP-GET 传递时它就停止工作了。 (在这两种情况下,离开浏览器的值完全相同)。
知道为什么 HTTP-POST 调用的处理方式与 HTTP-GET 不同吗?
此外,该操作还有其他参数。在 HTTP-POST 的情况下,它们都在正文中设置为:
{
"date": "04/15/2016",
"someText": "Hello World",
"someNumber": 42
}
对于 HTTP-GET,它们是查询参数:
domain.tld/controller/action?date=04%2F15%2F2016&someText=Hello+World&someNumber=42
更新:
为避免混淆,该方法被正确调用并且 returns 两种情况下的值。只是 DateTime
参数(实际上是 DateTime?
)没有被设置,就像我将它设置为一些无效的日期/字符串一样。
请检查您的请求处理程序是否为 GET or POST
,如果设置为 POST,则无法处理 GET 请求。
编辑 **忽略下面一个**:因为URL两种方法的编码相同
"The only difference that in GET
request is all the special characters will be encoded for. ex / to %2f
where in POST
it wont happen."
Any ideas why HTTP-POST calls would be handled differently than
HTTP-GET?
默认模型活页夹根据 HTTPVERB 使用以下区域性
- 用于 HTTPGET 的 InvariantCulture
- 您的 HTTPPOST 请求的 CurrentCulture。
这是因为用户会与来自不同文化背景的其他用户分享他们的 URLS (HTTPGET)。
假设我们有一位来自美国的用户想要向他们在英国的朋友发送 URL 关于 2016 年 4 月 15 日发生的事件。 (2016 年 4 月 15 日)。他们给他们的朋友以下 URL...
http://www.myurl.com/tickets/?eventdate=04%2F15%2F2016
如果我们不使用不变文化,那么这个日期对我们在英国的朋友将无效,因为他们的文化要求 dd/mm/yyyy。
关于 HTTPPOST,用户通常不会与其他用户共享这些类型的请求,因为它们通常是针对每个用户生成的。因此我们可以明确地使用 CurrentCulture.
您可以通过创建自己的模型活页夹来覆盖此默认行为。
希望对您有所帮助!
在我们的 MVC 3 Web 应用程序中,我们使用当前用户的首选项定义 Thread.CurrentThread.CurrentCulture
。但是,在一个视图中,我们始终以 mm/dd/yyyy
格式通过 Ajax 提交数据,只要用户的文化是 en_US
,这就可以正常工作。 (显然)
令人惊讶的是,当我们将它作为 HTTP-POST 传递时,它对所有用户都有效,但当我们将它作为 HTTP-GET 传递时它就停止工作了。 (在这两种情况下,离开浏览器的值完全相同)。
知道为什么 HTTP-POST 调用的处理方式与 HTTP-GET 不同吗?
此外,该操作还有其他参数。在 HTTP-POST 的情况下,它们都在正文中设置为:
{
"date": "04/15/2016",
"someText": "Hello World",
"someNumber": 42
}
对于 HTTP-GET,它们是查询参数:
domain.tld/controller/action?date=04%2F15%2F2016&someText=Hello+World&someNumber=42
更新:
为避免混淆,该方法被正确调用并且 returns 两种情况下的值。只是 DateTime
参数(实际上是 DateTime?
)没有被设置,就像我将它设置为一些无效的日期/字符串一样。
请检查您的请求处理程序是否为 GET or POST
,如果设置为 POST,则无法处理 GET 请求。
编辑 **忽略下面一个**:因为URL两种方法的编码相同
"The only difference that in GET
request is all the special characters will be encoded for. ex / to %2f
where in POST
it wont happen."
Any ideas why HTTP-POST calls would be handled differently than HTTP-GET?
默认模型活页夹根据 HTTPVERB 使用以下区域性
- 用于 HTTPGET 的 InvariantCulture
- 您的 HTTPPOST 请求的 CurrentCulture。
这是因为用户会与来自不同文化背景的其他用户分享他们的 URLS (HTTPGET)。
假设我们有一位来自美国的用户想要向他们在英国的朋友发送 URL 关于 2016 年 4 月 15 日发生的事件。 (2016 年 4 月 15 日)。他们给他们的朋友以下 URL...
http://www.myurl.com/tickets/?eventdate=04%2F15%2F2016
如果我们不使用不变文化,那么这个日期对我们在英国的朋友将无效,因为他们的文化要求 dd/mm/yyyy。
关于 HTTPPOST,用户通常不会与其他用户共享这些类型的请求,因为它们通常是针对每个用户生成的。因此我们可以明确地使用 CurrentCulture.
您可以通过创建自己的模型活页夹来覆盖此默认行为。
希望对您有所帮助!