服务器托管Asp.net mvc3应用程序,浏览器文化设置为da(丹麦语)
GET request url: /get?d=1.1 (note that the decimal separator is .)
return: da;1,1 (note that the decimal separator is ,)
GET request url: /get?d=1,1 (the decimal separator is ,)
return: Exception Details: System.ArgumentException: The parameters dictionary contains a null entry for parameter 'd' of non-nullable type 'System.Decimal' for method 'System.Web.Mvc.ContentResult get(System.Decimal)' in 'Intranet.Controllers.OrderController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters
但是对于一个帖子请求给出相同的输入,结果正好相反。
POST request url: /get2 (form data d=1.1)
return: Exception ...
POST request url: /get2 (form data d=1,1)
return: da;1,1
我认为POST请求按预期工作。但为什么GET请求表现不同?在这种情况下,默认模型绑定器如何工作。
答案 0 :(得分:2)
通过帖子发送数据时,语言环境生效。当您通过GET发送数据时,它始终使用不变的语言环境。
似乎这样做是因为您可以复制并粘贴网址,然后将其发送给其他国家/地区的某个人。如果在URL(GET)中包含参数时考虑了浏览器的语言,则URL会中断(如果考虑日期格式而不是小数分隔符,则更明显)。
在其他地方,.Net团队成员在此提及:http://forums.asp.net/t/1461209.aspx/1?Nullable+DateTime+Action+Parameters+Parsed+in+US+format+irrespective+of+locale+