我对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 }
);
嗯,我不相信这是完全正确的,但它目前有效。。。。