在控制器上找不到与请求AngularJS POST错误匹配的操作

时间:2014-09-22 14:28:30

标签: angularjs http-post asp.net-web-api

我有一个AngularJS的误解。另外,我对后端的WebApi并不熟悉,但我尝试了。 我有一个模态表单,只需点击一下按钮(提交)即可显示。当我点击“提交”时,我想要更新数据库中的内容。所以我发布了一个帖子。

AppModule.factory('editResult', function($http)
{
return {
    postResult: function(id, res) {
        return $http.post('/api/MatchesAdmin/'+id, res);
    }
};
});

此服务应该进行实际发布(我在控制器中的Submit函数中调用postResult)。    我没有在AppModule.config中设置任何内容,因为我不需要它...    WebApi控制器(MatchesAdminController)操作如下所示:

   [HttpPost]
    public HttpResponseMessage PostMatch(int id,string result)
    {
        MatchDTO match= _matchService.GetById(id);
        match.Result = result;
        _matchService.Update(match);

        return Request.CreateResponse(HttpStatusCode.OK);
    }

然而,我在其他环境中扮演这样的角色并且有效。但现在,可能是因为模态形式,而不是舒尔,它说:

找不到与请求URI匹配的HTTP资源..... / api / MatchesAdmin / 1'

在匹配请求的控制器'MatchesAdmin'上找不到任何操作(但是有动作)

为什么?我还检查了WebApi.config,看起来很好......

1 个答案:

答案 0 :(得分:1)

好吧,我终于得到了答案。我其实不知道该找什么。问题是我没有正确配置WebApi.config。我看了很多关于路由的问题,我偶然发现了stackoverflow上的这个答案:

[1] Web API routing with multiple parameters

我不知道它与webApi路由有关,涉及多个参数。 因为这是一次更新,我将POST更改为PUT。工厂修改如下:

AppModule.factory('editResult', function($http)
{
return {
    putResult: function(id, res) {
        return $http.put('/api/MatchesAdmin/PutMatch/' + id+'/'+res);
    }
  };
 });

另外,在WebApi.config中我现在有了这个:

 config.Routes.MapHttpRoute("UpdateMatchResult", "api/{controller}/{action}/{id}/{result}",
            new
            {
                id=UrlParameter.Optional,
                result=UrlParameter.Optional
            });

            config.Routes.MapHttpRoute(
              name: "DefaultApi",
              routeTemplate: "api/{controller}/{id}",
              defaults: new { id = RouteParameter.Optional }
          );

嗯,我不是真的,这是完全正确的,但它现在有效....