2014-09-22 54 views
1

我有一個AngularJS誤解。另外,我對後端WebApi並不熟悉,但我嘗試了一下。 我有一個模式的形式,點擊一個按鈕(提交)顯示。我希望當我點擊'提交'時,更新數據庫中的內容。所以我想要一個POST。在控制器上找不到與請求相匹配的操作AngularJS POST錯誤

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

該服務應該做實際的發佈(我在控制器的提交功能中調用postResult)。 我沒有在AppModule.config設置什麼,因爲我thaught沒有必要爲它... 的的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); 
    } 

但是我在其他情況下打出這樣的它的工作。但現在,模態形式,可能是因爲,沒有舒爾,它說:

沒有HTTP資源發現,請求匹配URI ...../API/MatchesAdmin/1'

行動未在匹配請求的控制器'MatchesAdmin'上找到(但有動作)

這是爲什麼?我也檢查了WebApi.config,它似乎很好...

回答

1

那麼,我終於得到了答案。我其實不知道該找什麼。問題是我沒有正確配置WebApi.config。我看了更多的路由,我偶然發現了這個答案的計算器,在這裏:

[1] Web API routing with multiple parameters

我不知道,它必須做的WebAPI路由,多參數。 因爲這是一個更新,我改變了POST到PUT.The工廠被修改如下:

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

嗯,我我不舒服這是完全正確的,但它現在的作品....

相關問題