我在ASP.Net Core 2.1
中具有EF Core 2.1
的端点下方
public class CustomerController
{
public IActionResult Post([FromBody]CustomerTO customer)
{
}
public IActionResult Get(int id)
{
var customer = _dal.GetCustomer(id);
return Ok(customer);
}
}
CustomerTO外观为
public class CustomerTO
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
//others
}
现在问题出在Swagger文档中,POST的请求有效负载包括CustomerId: 0
(无论如何可选)
因此,API的使用者在POST请求中传递CustomerId = someInt,因为它是EF Core Dal中的Identity属性,所以会引发错误
Cannot insert value on Identity column...
此错误非常明显并且可以接受,
我的要求是什么,如何使Swagger知道CustomerId是 不是POST请求中请求有效载荷的一部分?
为Get&Post创建单独的DTO似乎很麻烦。
谢谢!
答案 0 :(得分:1)
对于这种特定情况,您可以简单地使该属性为可空状态,然后按如下所示装饰它:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore]
public int? CustomerId { get; set; }
然后,如果它具有值,它将存在,否则将不属于JSON对象。
但是,如果您发现自己需要更改多个不同的属性或仅出于请求或响应的目的添加/删除内容,那么@DarjanBogdan是正确的:您应该为每个类使用不同的类。