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



我对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);
    }

然而,我在其他情况下也这样打球,而且效果很好。但现在,可能是因为模态形式,而不是shure,它说:

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

在控制器"MatchesAdmin"上找不到与请求匹配的操作(但有操作)

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

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

[1] 具有多个参数的Web API路由

我不知道它与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 }
          );

嗯,我不相信这是完全正确的,但它目前有效。。。。

最新更新