我在 DTO 中看到 HttpClient 和 Web API 的一些奇怪行为。当我的属性有数据注释时,HttpClient.PutAsJsonAsync() 不起作用。我在 Web API 端收不到任何东西。一些代码来解释:
我的 MVC 4 网页使用以下代码调用 Web API:
using (var client = new HttpClient())
{
var response = client.PutAsJsonAsync(uri+"/"+MyObject.Id, MyObject).Result;
response.EnsureSuccessStatusCode(); // Returns 500 when i use MyObject with annotations
}
要接收的 Web API 控制器代码。请注意,当 MyObject 有注释时,这甚至不会触发:
public MyObject Put(MyObject myObject)
{
try
{
if (myObject == null) throw new NullReferenceException();
}
catch (Exception e)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest));
}
}
MyObject DTO 工作时:
public class MyObject
{
public int Id { get; set; }
public Nullable<int> AuditProgramId { get; set; }
public string Title { get; set; }
public System.DateTime StartDate { get; set; }
public System.DateTime EndDate { get; set; }
}
MyObject DTO 不起作用时:
public class MyObject
{
public int Id { get; set; }
public Nullable<int> AuditProgramId { get; set; }
[Required]
public string Title { get; set; }
[Required, DataType(DataType.Date)]
public System.DateTime StartDate { get; set; }
[Required, DataType(DataType.Date)]
public System.DateTime EndDate { get; set; }
}
有任何想法吗?
更新 1
它可以在没有注释的情况下使用这些值,但在使用注释时失败:
var myObj = new MyObject {
Id=4,
Title="Test Title",
StartDate=DateTime.Today,
EndDate=DateTime.Today.AddDays(2)
};