具有列表的Web API和对象参数(T)

时间:2013-09-13 12:08:48

标签: asp.net-web-api

我有一个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

测试只是一个简单的类(仅限字符串/整数)

我发送以下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类更改为仅使用单个“Test”而不是List(of Test),它也可以工作。

问题似乎在于使用List / Collection / Enumeration(测试)。

我做错了什么,我已经在这里待了好几个小时了,它已经开始了。我用谷歌搜索并搜索并绕圈试图寻找解释。我得到的最接近的是添加参数然后到达方法和断点,但参数的所有属性都没有?

我可以从webapi方法返回一个IEnumerable(无论如何),所以我缺少将一个发送给webapi方法吗?

EDIT1 :将测试类剥离到一个字段“id”,在那里工作正常,并将其重新构建,我将其缩小为该类中某个字段的一个属性。

以下是测试类Status和DNNUserId中的两个字段。 无论是否有必需属性,状态都可以正常工作! 但是,将必需属性添加到DNNUserId属性会导致不调用/到达该方法?取消所需的属性有效吗?!?!

也许我已经在这太久了,因为除了字符串vs整数之外没有区别?如果需要整数,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

1 个答案:

答案 0 :(得分:0)

你可以尝试一下,看看它是否有效。

Public Class DTOStatusUpdate
  Public Property QueryByNameDTO As QueryByNameDTO 
  Public Property Tests As ICollection(Of Test)

  Public Sub New()
    Me.Tests = New Collection(Of Test)
  End Sub
End Class