2016-03-03 46 views
1

我正在尝试使用两个不同的查询字符串值或请求正文来使Web API绑定我的模型上的特殊属性。采取这种模式:在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 
} 

URL被击中/events/add具有以下JSON体:

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

这些JSON性能Start的名称和End不能更改,但我希望将这些绑定到我的模型上的我的TimeInterval属性。

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

理想的情况下,我要对我的DateRange属性创建一个属性像[TimeIntervalBind(StarDatetUtc = "Start", EndDateUtc = "End")]赶场名称,但目前被困我是否应该使用IModelBinder或在的WebAPI其他替代品之一。

回答

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作为参数,然后将其转化为您的自定义事件类:

[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 
    }   
} 
0

在我看来,这将是最好创建一个视图模型(CustomEventVM),你会在使用您的请求和接收它的操作方法中,您只需创建模型并使用ViewModel中收到的数据处理它们。