参加以下课程......
public class Person
{
public long Id { get; set; }
public long CaseID { get; set; }
public string FirstName { get; set; }
}
以下Web API调用...
public IHttpActionResult Put(long id, [FromBody] Person person)
对于PUT调用,我们希望模型绑定器忽略CaseID属性并仅对Id和FirstName进行水合。
我正在考虑使用自定义模型绑定器来解决此问题。所以模型绑定器应该拉动HTTP动词(在这种情况下是PUT),如果PUT只绑定Id和FirstName。对于其他动词绑定所有属性。
有没有办法使用默认的模型绑定器来引入这种类型的逻辑?
答案 0 :(得分:2)
这就像用石头敲钉子一样。它可能会完成工作,但它不是正确的工具。您的模型应该是您期望的资源的表示。换句话说,如果您不想要CaseID
,那么您的模型不应具有该属性。您可以通过简单的继承轻松解决这个问题。例如,您可以执行以下操作:
public class Person
{
public long Id { get; set; }
public string FirstName { get; set; }
}
public class PersonWithCaseID : Person
{
public long CaseID { get; set; }
}
然后,当你不想要CaseID
时,例如你的PUT方法:
public IHttpActionResult Put(long id, [FromBody] Person person)
当你这样做时:
public IHttpActionResult Post(long id, [FromBody] PersonWithCaseID person)
这更明确。它100%清楚您正在做什么,并且API仍然是自我记录的:您可以轻松地告诉Put
不接受CaseID
。