我的应用程序在 ro-RO 区域性设置下运行,在 web.config 全球化部分中配置。如果我发出像这样的 POST 请求
POST /myapp/index
date=03-12-2010&value=something
模型绑定将此映射到正确的日期值“03 December 2010”,因为 ro-RO 区域性的默认日期时间格式是 dd-MM-yyyy。如果我将请求方法更改为 GET 并传递相同的数据,则我的操作中的日期值将变为“2010 年 3 月 12 日”(MM-dd-yyyy 日期时间格式)
GET /myapp/index?date=03-12-2010&value=something
$.getJSON('/Home/Index', $('form').serialize(), function(d) {
// ...
});
$.post('/Home/Index', $('form').serialize(), function(d) {
// ...
}, 'json');
因此,在这种情况下,“getJson”和“post”必须返回相同的结果,但由于日期时间差异,我得到不同的结果。
如何为 GET 请求启用相同的解析格式?
我知道我可以使用更通用的格式,例如 yyyy-MM-dd 日期,但我只是好奇为什么会发生这种情况?
从我之前关于这个问题的回答来看:调用操作时,可空日期时间参数永远不会绑定
"这是故意的。属于 URI 一部分的任何内容(请注意 URI 中的“统一”)都被解释为好像来自不变的区域性。这样一来,复制链接并通过 IM 将其发送给英国朋友的美国用户就可以确信他的朋友将看到完全相同的页面(而不是由于日期时间转换错误而导致 HTTP 500,例如)。一般来说,RouteData 或 QueryString 中传递的日期应采用 yyyy-mm-dd 格式,以便跨文化明确.
如果您需要以区域性感知的方式解释 QueryString 或 RouteData 参数,请将其作为字符串拉入,然后手动将其转换为所需的类型,并传入所需的区域性。 (DateTime.Parse 具有允许您指定区域性的重载。)如果您这样做,我建议还将所需的区域性作为 QueryString 或 RouteData 参数,以便 URI 的“统一”部分不会丢失,例如URL 将类似于 ...?culture=fr-fr&date=01-10-1990。"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)