2011-06-01 77 views
2

服務器託管Asp.net MVC3應用程序和瀏覽器區域性設置爲DA(丹麥)ASP.NET MVC模型綁定解析十進制不同與GET和POST請求

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請求的行爲不同?在這種情況下默認模型聯編程序如何工作。

回答

2

當您通過信息發送數據時,語言環境會生效。通過GET發送數據時,它始終使用不變的區域設置。

看起來這樣做是因爲您可以複製並粘貼一個URL,並將其發送給其他國家/地區的某個人。如果在URL(GET)中包含參數時考慮了瀏覽器的語言,那麼URL會中斷(如果考慮日期格式而不是小數分隔符,則更明顯)。

在其他地方,它在這裏由.Net團隊的成員提到:http://forums.asp.net/t/1461209.aspx/1?Nullable+DateTime+Action+Parameters+Parsed+in+US+format+irrespective+of+locale+