AJAX调用无法找到我的Web API控制器

时间:2014-03-24 15:21:38

标签: ajax asp.net-web-api asp.net-mvc-routing

我有以下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中的数据行,它运行正常。

为什么路由不能用于此呼叫的任何想法?

1 个答案:

答案 0 :(得分:2)

我跑过这篇文章:

http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

基本上,WebAPI不能绑定到像string这样的原始数据类型。您必须创建要绑定的模型,或使用[FromBody]属性。我修改了我的方法:

public bool ExternalLogin([FromBody]string provider)

现在工作正常。