我有以下AJAX调用:
var params = {
provider: "facebook"
};
$.ajax({
url: "http://localhost/taskpro/api/account/ExternalLogin",
data: JSON.stringify(params),
type: "POST",
contentType: 'application/json; charset=utf-8'
})
.done(function (response) {
alert("Success");
});
调用以下WebAPI控制器:
public class AccountController : ApiController
{
[HttpPost]
[AllowAnonymous]
public bool ExternalLogin(string provider)
{
return true;
}
}
使用以下路线图:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
当我执行此操作时,fiddler正在返回:
{"Message":"No HTTP resource was found that matches the request URI
'http://localhost/taskpro/api/account/ExternalLogin'.","MessageDetail":
"No action was found on the controller 'Account' that matches the request."}
我还有几个其他调用正在运行的控制器。只是这个电话给我带来麻烦。
另外,如果我删除控制器中的参数,那么它只是
public bool ExternalLogin()
并注释掉ajax中的数据行,它运行正常。
为什么路由不能用于此呼叫的任何想法?
答案 0 :(得分:2)
我跑过这篇文章:
http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/
基本上,WebAPI不能绑定到像string这样的原始数据类型。您必须创建要绑定的模型,或使用[FromBody]属性。我修改了我的方法:
public bool ExternalLogin([FromBody]string provider)
现在工作正常。