cho*_*bo2 5 c# rest restsharp asp.net-web-api
我正在使用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;
});
Run Code Online (Sandbox Code Playgroud)
我的StoreDm是空的.
我不是在这么多级别上得到这个.首先,我在所有属性上设置了IsRequired,无论出于何种原因,ModelState认为"null"ViewModel是有效的.
其次,我不明白为什么会这样null.我必须添加[FromUri]以使其绑定.如果这将是一个Post具有相同的restClient代码,但也有人使用fiddler正文请求会发生什么.
如果我被迫放弃,[FromUri]那么我认为小提琴体的请求不会起作用.
我怎么能拥有它,以便两个请求都通过并正确绑定?
Rad*_*ler 11
Web API参数绑定(从此处提取:路由和操作选择)执行此操作:
参数绑定.参数绑定是Web API为参数创建值的方式.以下是参数绑定的默认规则:
因此,StoreDm默认情况下,任何复杂类型(如类都是)都应该是正文的一部分
如标准定义超文本传输协议 4.3消息正文中所述
消息中允许消息正文的规则因请求和响应而异.
通过在请求的消息头中包含Content-Length或Transfer-Encoding头字段来指示请求中消息体的存在.一个消息体必须不被包括在请求如果请求方法的(第5.1.1节)的规范不允许在请求中发送的实体主体.
因此,虽然Web API提供了一些常用功能,但它会尝试通用.可能有或没有消息体的请求.因此,有了这个,动作选择和参数绑定是常见的,没有推断特定的"当前"请求,也许是明显的设置(我们认为,GET将始终具有StoreDmURI中的所有参数(对象的属性).但引擎没有)
该POST将绑定StoreDm开箱即用,因为它的属性就会在体内可以发现,对复杂对象的标准结合.
该GET打破了规则,(复型)的特性在URI,所以我们只需要告知框架:[FromUri].在其他情况下,将找到Method,将传递null(从message-body限定)
| 归档时间: |
|
| 查看次数: |
15729 次 |
| 最近记录: |