从客户

时间:2017-09-07 09:47:10

标签: c# asp.net-web-api asp.net-core-webapi

我的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有效,当数据库插入/更新发生时,我收到错误(显然)

知道为什么会这样吗?我是否应该将必填字段的属性带入客户端应用程序?

1 个答案:

答案 0 :(得分:1)

当您在客户端应用程序中调用LogIt log = new LogIt();时,构造函数将LogID设置为0。这个一个值,因此将在您的JSON有效负载中发送为" logID:0",例如。