我有一个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,看起来很好......
答案 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 }
);
嗯,我不是真的,这是完全正确的,但它现在有效....