我正在尝试使用web api调用:我想提交一个电子邮件地址,然后在服务器上,该方法将验证并返回null或消息。
这就是我的尝试:
[Post]
public string validate(string email) {
return this._contextProvider.ValidateEmail(email);
}
但是,我将此消息返回给客户端:未找到与请求URI“https://localhost:44300/breeze/data/validate
匹配的HTTP资源有效负载如下所示:{email:“Greg@gmail.com”}
答案 0 :(得分:2)
事实证明,问题是参数绑定。
在Web API中,绑定的处理方式与MVC不同。默认情况下,从URI中提取简单类型,而不是正文。复杂类型是从消息正文中提取的。
然后我将[FromBody]属性添加到Action方法,然后找到了action方法。但是,唉,email参数为null。
public string validate([FromBody]string email) {
return this._contextProvider.ValidateEmail(email);
}
当使用这个技巧时,身体不能是json,而是构造为querystring - email=greg@gmail.com
。我不想这样做,所以最后创建了一个接受参数的类,并且按预期工作。
public class ParameterizedAction {
public string Parameter { get; set; }
}
public string validate(ParameterizedAction arg) {
return this._contextProvider.ValidateEmail(arg.Parameter);
}
本文有更多信息:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection
以及这一个:http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/