0

以下のような 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
4

1 に答える 1