我是使用Asp.NET WebApi,有一件事情让我感到困惑,那就是请求绑定。
我有这个ViewModel:
[DataContract(Name="Store")]
public class StoreDm
{
[DataMember(IsRequired = true)]
[MinLength(3)]
public string Name { get; set; }
[DataMember(IsRequired = true)]
public double Latitude { get; set; }
[DataMember(IsRequired = true)]
public double Longitude { get; set; }
}
public HttpResponseMessage GetStoreNames(StoreDm vm)
{
if (ModelState.IsValid)
{
}
}
RestClient c = new RestClient("http://localhost:3333/api/store");
RestRequest r = new RestRequest("/GetStoreNames", Method.GET);
r.AddParameter("Name", autoComplete);
r.AddParameter("Latitude", "4");
r.AddParameter("Longitude", "-7");
var d = c.BuildUri(r);
c.ExecuteAsync(r, response2 =>
{
var content = response2.Content;
});
我的 StoreDm 为空。
我无法理解这个问题。首先,我在所有属性上设置了 IsRequired,但出于某种原因 ModelState 认为 “null” 的 ViewModel 是有效的。
其次,我不明白为什么它是 null
。我必须添加 [FromUri]
才能绑定它。如果这是一个 Post
请求,并且有人使用 Fiddler 请求正文会发生什么。
如果我被迫放置 [FromUri]
,那么我认为 Fiddler 正文请求将无法工作。
如何使两个请求都正常通过并正确绑定?