我正在尝试使用两个不同的查询字符串值或请求体来使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属性Start
和End
的名称,但我希望将这些属性绑定到我的模型上的TimeInterval
属性。
是否可以在WebAPI中创建属性绑定?
理想情况下,我要在我的DateRange
属性上创建一个属性,例如[TimeIntervalBind(StarDatetUtc = "Start", EndDateUtc = "End")]
来捕获字段名称,但目前我是否应该使用IModelBinder
或其中一个替代方案的WebAPI。
答案 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方法中,您只需创建模型并使用它们在您收到的数据中使用它们。视图模型。