Asp.net mvc WCF Web API-与对象的模型绑定(确保请求HttpOperationHandler具有类型可分配给…)的输出参数

Asp.net mvc WCF Web API-与对象的模型绑定(确保请求HttpOperationHandler具有类型可分配给…)的输出参数,asp.net-mvc,wcf,asp.net-mvc-3,wcf-web-api,Asp.net Mvc,Wcf,Asp.net Mvc 3,Wcf Web Api,在WCFWebAPI预览5上,我正在处理一个奇怪的行为。以下是场景: 这是我的模型: public class Person { public int ID { get; set; } public string Name { get; set; } public string Surname { get; set; } public int Age { get; set; } } 这是API: [ServiceContract] public class Pe

在WCFWebAPI预览5上,我正在处理一个奇怪的行为。以下是场景:

这是我的模型:

public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public int Age { get; set; }
}
这是API:

[ServiceContract]
public class PersonApi {

    [WebGet(UriTemplate = "person?id={ID}&name={Name}&surname={Surname}&age={Age}")]
    public Person Get(Person person) {

        return person;
    }

}
我使用以下代码注册了API:

RouteTable.Routes.MapServiceRoute<ADummy.PersonApi>("Dummy");
在WCF Web API中,我认为事情不像ASP.NET MVC中那样工作

在WCF Web API中,模型绑定到对象的方式是什么

更新

我增加了另一种方法:

[WebInvoke(UriTemplate= "put", Method="POST")]
public Person Put(Person person) {

    return person;
}
当我使用以下详细信息调用此方法时:

方法:邮寄

网址:

接受:/Content类型:text/xml

内容长度:189

正文:

<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>1</ID>
<Name>Tugberk</Name>
<Surname>Ugurlu</Surname>
<Age>25</Age>
</Person>

1.
图格伯克
乌古鲁
25

我得到了我需要的。因此,不允许将查询字符串绑定到自定义对象?

根据您的经验,设计行为似乎是Get()操作将仅绑定在您的模板中定义的参数。就用途和安全性而言,这是正确的行为。

支持最新版本的(与ASP.NET MVC 4 Beta一起发布)模型绑定

模型绑定和验证:模型绑定器提供了一种简单的方法,可以从HTTP请求的各个部分提取数据,并将这些消息部分转换为Web API操作可以使用的.NET对象


对于ASP.NET Web API的早期版本,可以使用HttpOperationHandler实现所需的功能,并在OnHandle方法中返回模型。也许这些问题和答案可以作为灵感。

如果您将操作从Get()更改为Post(),那么Person模型是否会正确绑定?@consuller可以查看我的更新。但是Post也没有绑定查询字符串?很抱歉,但不清楚。您是否尝试过传递已定义查询字符串的帖子?如果是的话,结果是什么?我试过了,得到了同样的错误。如果我发布json格式的结构化xml,它会将输入绑定到一个对象。你似乎不像我那样对这个问题有相当的了解。所以,我们都是根据自己的胆量来猜的。
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ID>1</ID>
<Name>Tugberk</Name>
<Surname>Ugurlu</Surname>
<Age>25</Age>
</Person>