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

本文关键字:属性 绑定 模型 API 复杂 Web | 更新日期: 2023-09-27 18:37:12

我正在尝试使用两个不同的查询字符串值或请求正文在我的模型上绑定特殊属性的 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 使用以下 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 中的其他替代方案之一。

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

我会执行以下操作:

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

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