我刚刚开始学习.NET Web API编程,对于经验丰富的.NET开发人员,我有一个问题--将对象引用传递到Create端点的“正确”方法是什么?
我有以下模型:
public class Task
{
public int ID { get; set; }
public string Title { get; set; }
public virtual User User { get; set; }
}
public class User
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
和我的控制器端点来创建Task
[HttpPost]
public async Task<IActionResult> PostTask([FromBody] Models.Task task)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_context.Task.Add(task);
await _context.SaveChangesAsync();
return CreatedAtAction("GetTask", new { id = task.ID }, task);
}
默认情况下,这有一些有趣的行为。它期望将整个User
模型传递到POST请求中(如下所示),并在传递时实际创建用户:
{
"id": 0,
"title": "string",
"user": {
"id": 0,
"firstName": "string",
"lastName": "string"
}
}
从技术上讲,我理解它为什么要这样做,但在一个真实的应用程序中,这绝对是不可接受的行为-所以我的问题是-在.NET中传递UserID
并对模型进行验证的“正确/适当”方式是什么?我应该放弃使用"ModelState.IsValid
“而进行手动验证吗?
作为第二个问题-我正在使用NSwag从我的API生成Swagger文档,它将"id
“显示为需要传递给POST方法的参数。显然,Swagger不能被传递,因为它是在代码中生成的,但是有没有办法让ID
不将ID
显示为可传递的属性呢?
转载请注明出处:http://www.shandongyidao.com/article/20230526/2193975.html