Web API复杂模型中的属性绑定

时间:2016-03-03 07:09:01

标签: c# asp.net-web-api model-binding

我正在尝试使用两个不同的查询字符串值或请求体来使Web API绑定到我的模型上的特殊属性。采取这种模式:

public class CustomEvent {

    public int Id { get; set; }
    public string Name { get; set; }
    public TimeInterval DateRange { get; set; }

}

public class TimeInterval {

    public DateTime StartDateUtc { get; set; }
    public DateTime EndDateUtc { get; set; }

}

这个快速控制器动作:

[HttpPost, Route("events/add")]
public void AddEvent(CustomEvent event)
{
    // Get events
}

使用以下JSON正文/events/add点击网址:

{
    "Id": 2,
    "Name": "This is the event name",
    "Start": "dd-mm-yyyy",
    "End": "dd-mm-yyyy"
}

无法更改这些JSON属性StartEnd的名称,但我希望将这些属性绑定到我的模型上的TimeInterval属性。

是否可以在WebAPI中创建属性绑定?

理想情况下,我要在我的DateRange属性上创建一个属性,例如[TimeIntervalBind(StarDatetUtc = "Start", EndDateUtc = "End")]来捕获字段名称,但目前我是否应该使用IModelBinder或其中一个替代方案的WebAPI。

2 个答案:

答案 0 :(得分:0)

我会做以下事情:

1:创建一个中间模型,其中包含以发布数据命名的属性,例如:

public class myTemporaryEventModel(){
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
}

2:在你的POST方法中,将myTemporaryEventModel作为参数,然后将其转换为CustomEvent类:

[HttpPost]
[Route("events/add")]
public void AddEvent(myTemporaryEventModel postedData)
{
    TimeInteval interval = new TimeInterval(){
        StartDateUtc = postedData.Start,
        EndDateUtc = postedData.End
    }

    CustomEvent event = new CustomEvent(){
        Id = postedData.Id,
        Name = postedData.Name,
        DateRange = interval
    }        
} 

答案 1 :(得分:0)

在我看来,最好创建一个ViewModel(CustomEventVM),您可以在请求中使用它,在接收它的action方法中,您只需创建模型并使用它们在您收到的数据中使用它们。视图模型。