我有一個控制器,預計List<int>
和展示奇怪的行爲,我寫出來的所有的ModelState錯誤,我寫出來的所有值空字符串會導致不正確的索引出現在ModelState中鍵
public class MyTestController : ApiController
{
public void Post(List<int> MyInts)
{
Debug.WriteLine("Errors: ");
foreach(string Error in this.ModelState.Keys)
{
Debug.WriteLine(Error);
}
Debug.WriteLine("Values:");
foreach(int MyInt in MyInts)
{
Debug.WriteLine(MyInt.ToString());
}
}
}
當我發帖:
[1, 2, 3, 4]
我得到
Errors:
Values:
1
2
3
4
非常有意義。
下一個我張貼
[1, 2, 3.5, 4]
我得到:
Errors:
MyInts[2]
Values:
1
2
4
非常有意義太
當我發佈
[1, "", 3, 4]
我得到
Errors:
MyInts[2]
Values:
1
3
4
這是怎麼回事? MyInts [2]非常好,我甚至可以在價值觀中看到它。我需要這些數據是正確的,所以我可以告訴我的用戶他們需要修復哪個字段。
還有一個問題,如果我上傳:
[1.1, 2, 3, 4]
我得到
Errors:
MyInts[0]
MyInts
Values:
因此,如果第一個值是無效的整個列表被宣佈無效,我留下了一個空列表。再次,我需要錯誤來說明出了什麼問題,我不知道這裏發生了什麼。
我遇到了這種行爲可空的DateTimes,它本質上是同一個問題。任何幫助將不勝感激,謝謝。
將控制器中返回的數據類型作爲參數的全部要點是避免DTO - 如果我自己解析響應,它會爲流程引入一個全新的理論上不必要的層。我的意思是嘿,爲什麼不接受Post方法中的字符串併發送字符串化的json對象?我認爲這種行爲是微軟的錯,他們應該通過ModelState提供準確的錯誤報告。 –
如果你正在尋找解決問題的方法,因爲有些東西不起作用,我已經指出了幾種不同的解決方案:在出現錯誤時自己的「手動」解析,爲數組工作的定製綁定器如預期的那樣,或者調試源代碼,並且理想地在項目中創建問題,甚至提供解決方案。除此之外,如果你想要我們可以討論誰是誰的錯,等等,但我認爲這是毫無意義的,不管我們討論多少,不幸的是它不會解決問題。 – JotaBe