我的WebAPI中有以下类定义:
public class LogIt
{
[Required(ErrorMessage = "Log ID required")]
public int LogID { get; set; }
public int StatusID { get; set; }
public string Message { get; set; }
public int UserID { get; set; }
}
直接使用Restlet调用它时,它正确验证,并且当LogID未包含在JSON有效负载中时错误。
这是控制器中调用的shell:
public IHttpActionResult PostTrace([FromBody]LogIt log)
{
if (ModelState.IsValid) {
LogIt.Insert(log);
}
return Ok();
}
从我的客户端应用程序中,我定义了以下类:
public class LogIt
{
public int LogID { get; set; }
public int StatusID { get; set; }
public string Message { get; set; }
public int UserID { get; set; }
}
调用的代码:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:8080/api/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
LogIt log = new LogIt();
log.StatusID = 1;
log.Message = "Test";
log.UserID = 1;
HttpResponseMessage response = await client.PostAsJsonAsync("log/trace/insert", log);
response.EnsureSuccessStatusCode();
但是,LogID永远不会在WebAPI中被检查为“必需”字段,因此modelstate有效,当数据库插入/更新发生时,我收到错误(显然)
知道为什么会这样吗?我是否应该将必填字段的属性带入客户端应用程序?
答案 0 :(得分:1)
当您在客户端应用程序中调用LogIt log = new LogIt();
时,构造函数将LogID
设置为0。这个是一个值,因此将在您的JSON有效负载中发送为" logID:0",例如。