DTO を使用した HttpClient と Web API で奇妙な動作が見られます。プロパティにデータ注釈を配置すると、HttpClient.PutAsJsonAsync() が機能しません。Web API 側で何も受信できません。説明するコード:
私の MVC 4 Web ページは、次のコードで 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)
};