我在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);
}
}
客户TO看起来像
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 中的标识属性,它会引发错误
Cannot insert value on Identity column...
这个错误是很明显和可以接受的,
我的要求是什么,如何让 Swagger 知道 CustomerId 是 不是 POST 请求中请求有效负载的一部分?
为Get & Post创建一个单独的DTO似乎是一个开销。
谢谢!!
对于此特定方案,只需使属性可为 null,然后按如下所示对其进行修饰:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore]
public int? CustomerId { get; set; }
然后,如果它有一个值,它将存在,否则它不会是 JSON 对象的一部分。
但是,如果您发现自己需要更改多个不同的属性或添加/删除内容,只是为了请求或响应,那么@DarjanBogdan是正确的:您应该为每个属性使用不同的类。