【发布时间】:2018-11-15 01:54:32
【问题描述】:
我正在使用 ASP.NET Core 2.1、Web.API 和 OData (7.0.0-beta4) 构建概念验证 API。
我的一个 OData 端点负责Employer 实体上的基本 CRUD 操作。 POST 端点 - 创建一个全新的 Employer 记录 - 定义如下:
// POST: api/Employers
[HttpPost]
public async Task<IActionResult> PostEmployer([FromBody] Employer employer)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
_context.Employers.Add(employer);
await _context.SaveChangesAsync();
return CreatedAtAction("GetEmployer", new { id = employer.Id }, employer);
}
我的Employer 实体是这样定义的:
namespace MyProject.Models
{
public class Employer
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
}
}
如果我使用这样的 POST 正文点击此 OData 端点:
{
"Name": "My Employer",
"IsActive": true
}
我收到一条错误消息:
InvalidOperationException: No route matches the supplied values.
这是因为 Id 属性是必需的,但在我的 JSON 中没有提供。但是,我不想提供Id 属性,因为该属性将由数据库自动生成。如果我确实提供了Id 属性,我的请求将被成功路由,但在此过程中稍后会收到实体框架错误 (Cannot insert explicit value for identity column),这是有道理的。
如何让我的 OData 端点在 POST 请求期间忽略所需的 Id 属性?
【问题讨论】:
标签: c# asp.net asp.net-web-api asp.net-core odata