通过Web API操作接收复杂数据

时间:2012-11-14 23:23:35

标签: vb.net asp.net-web-api custom-model-binder

我需要一种方法将复杂的Web请求转换为.Net对象。我知道WebAPI使用默认的模型绑定器,对于复杂的数据,需要自定义模型绑定器。

物件

Public Class LapMobileModel
    Public Property Type As Integer
    Public Property EndTime As String
    Public Property StartTime As String
End Class

Public Class RaceMobileModel
    Public Property RaceName As String
    Public Property UserId As Integer
    Public Property Laps As IEnumerable(Of LapMobileModel)
    Public Property numberOfRacers As String
    Public Property PreRacePosition As String
    Public Property PostRacePosition As String
End Class

Public Class RaceListMobileModel
    Public Property RaceList As IEnumerable(Of RaceMobileModel)
End Class

动作(在ApiController中)

Public Function SyncLapData(ByVal raceList As RaceListMobileModel) As String
    'stuff
    Return "OK"
End Function

我有自定义模型绑定器的骨架:

Imports System.Web.Http
Imports System.Web.Http.ModelBinding
Imports System.Web.Http.Controllers


Public Class EventDataModelBinder
    Implements IModelBinder

    Public Function BindModel(actionContext As HttpActionContext, 
                              bindingContext As ModelBindingContext) 
                              As Boolean Implements IModelBinder.BindModel
    End Function
End Class

问题:

如何使用actionContext获取构建RaceListMobileModel所需的数据?

如何将其正确存储在bindingContext中?

目前,数据正在通过带有JSON内容的POST发送。

1 个答案:

答案 0 :(得分:1)

Web api不使用模型绑定来绑定请求正文中的数据。你应该看一下参数绑定。 http://blogs.msdn.com/b/jmstall/archive/2012/05/11/webapi-parameter-binding-under-the-hood.aspx

对于json内容,web api使用json.net序列化程序作为默认绑定模型。它支持嵌套模型或集合。所以我在模型中看不到任何不支持的内容。在反序列化json时遇到任何问题吗?或者在绑定数据时有一些特殊的逻辑?