2017-04-18 41 views
0

采取以下类...的WebAPI条件基础上的结合HTTP动词

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

可能重复[设置基于HTTP动词的必填字段](http://stackoverflow.com/questions/22940709/set-required-fields-based-on-http-verb) – Jaya

回答

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