以下のような WebAPI メソッドがあります。
Public Function PostTestStatus(dto As DTOStatusUpdate) As HttpResponseMessage
「dto」パラメータは次のように定義されます。
Public Class DTOStatusUpdate
Property QueryByNameDTO As QueryByNameDTO
Property Tests As ICollection(Of Test)
Public Sub New()
Me.Tests = New Collection(Of Test)
End Sub
End Class
tests は単純なクラスです (文字列/整数のみ)
そして、私は次のjsonを送信しています:(これは正しいと検証されます)
{"QueryByNameDTO":{"email":"atest@here.co.uk","notes":"blahblahblah","Name":"bob"},"Tests":[{"Name":"gsdf","Status":"idle"},{"Name":"gsdf","Status":"idle"}]}
Collection(Of Test) が有効ではないため、私のメソッドに到達することはありません。List(Of Test)、IEnumerable(Of Test)、およびその他のさまざまな組み合わせを試してみましたが、どれも機能しませんでした。
私が得られない部分は、「テスト」リストなしでjsonを送信すると、メソッドのブレークポイントに到達し、最初のプロパティ(QueryByNameDTO)がすべて存在し、正しいということです。
DTOStatusUpdate クラスを変更して、List(of Test) ではなく単一の「Test」のみを使用する場合にも機能します。
問題は、List/Collection/Enumeration(of Test) の使用にあるようです。
私は何を間違っているのですか、私は何時間もこれに取り組んでいて、頭を悩ませています. 私が得た最も近いものは、メソッドとブレークポイントに到達するパラメーターに追加することに関するものでしたが、パラメーターのすべてのプロパティは何もありませんか?
webapi メソッドから IEnumerable (何でも) を返すことができます。
EDIT1:テストクラスを1つのフィールド「id」に落として、正常に機能するようにし、それを元に戻すと、これをそのクラスの1つのフィールドの1つの属性に絞り込みました。
これは、テスト クラス Status と DNNUserId の 2 つのフィールドです。ステータスは、必須属性の有無にかかわらず正常に機能します! ただし、DNNUserId プロパティに Required 属性を追加すると、メソッドが呼び出されない/到達しませんか? 必要な属性を削除すると機能しますか?!?!
文字列と整数以外に違いがないため、おそらくこれは長すぎますか?整数が必要な場合、json を別の形式にする必要がありますか? 誰でもこれに光を当てることができますか?
Private _Status As String
<Required()>
Public Property Status As String
Get
Return _Status
End Get
Set(value As String)
If _Status <> value Then
_Status = value
OnPropertyChanged("Status")
End If
End Set
End Property
Private _DNNUserId As Integer
Public Property DNNUserId As Integer
Get
Return _DNNUserId
End Get
Set(value As Integer)
If _DNNUserId <> value Then
_DNNUserId = value
OnPropertyChanged("DNNUserId")
End If
End Set
End Property