在我们的MVC 3 Web应用程序中,我们使用当前用户的首选项定义"filter": {
"bool": {
"must": [
{
"terms": {
"college.myId": [
"371"
]
}
}
]
}
。但是,在一个视图中,我们始终以Thread.CurrentThread.CurrentCulture
格式通过Ajax提交数据,只要用户的文化是mm/dd/yyyy
,这就可以正常工作。 (显然)
令人惊讶的是,当我们将其作为HTTP-POST传递时,它适用于所有用户,但当我们将其作为HTTP-GET传递时停止工作。 (在这两种情况下,完全相同的值都是离开浏览器)。
为什么HTTP-POST调用的处理方式与HTTP-GET不同?
此外,该操作还有其他参数。在HTTP-POST的情况下,它们都在正文中设置,如:
en_US
对于HTTP-GET,它们是查询参数:
{
"date": "04/15/2016",
"someText": "Hello World",
"someNumber": 42
}
更新
为避免混淆,正确调用该方法并在两种情况下返回值。只是domain.tld/controller/action?date=04%2F15%2F2016&someText=Hello+World&someNumber=42
param(实际上是DateTime
)没有被设置,就像我将它设置为某个无效日期一样字符串。
答案 0 :(得分:3)
为什么HTTP-POST调用的处理方式不同于 HTTP-GET?
默认模型绑定器使用以下文化,具体取决于HTTPVERB
这是因为用户将与来自不同文化的其他用户共享他们的URL(HTTPGET)。
想象一下,我们有一位来自美国的用户希望向他们在英国的朋友发送关于2016年4月15日举行的活动的网址。 (2016年4月15日)。他们给他们的朋友以下网址......
http://www.myurl.com/tickets/?eventdate=04%2F15%2F2016
如果我们不使用Invariant Culture,那么这个日期对于我们在英国的朋友来说是无效的,因为他们的文化期望dd / mm / yyyy。
关于HTTPPOST,用户通常不会与其他用户共享这些类型的请求,因为它们通常是基于每个用户生成的。因此,我们可以明确使用CurrentCulture。
您可以通过创建自己的模型绑定器来覆盖此默认行为。
希望这有帮助!
答案 1 :(得分:-1)
请检查您的请求处理程序是否为GET or POST
,如果设置为POST,则无法处理GET请求。
修改 **忽略一下**:因为两种方法中的网址编码相同
" GET
请求中唯一的区别是所有特殊字符都将被编码为for. ex / to %2f
,POST
中不会发生这种情况。"