为什么PUT不被控制器识别?

时间:2014-04-17 18:30:18

标签: asp.net-mvc angularjs asp.net-web-api crud

我正在尝试更新客户反馈帖子,POST&删除工作,但我已经被困在PUT上几天了。任何帮助都会很棒。感谢

app.factory('Post', function ($resource) {

return $resource('/api/apiPost/:id',
{ id: '@id' },
{ 'save': { method: 'POST' } },
{ 'update': { method: 'PUT' } },
{ 'query': { method: 'GET', isArray: false } });

});

CONTROLLER

$scope.updatePost = function (post) {
    //alert("WORKS");
    Post.update({ id: post.PostId }, $scope.post, function () {
        $scope.postArray.push(post);
        $scope.post = {
            Title: '',
            Body: ''
        };
    }, function () { });


}

ADAPTER

 public Post PutNewPost(int id, Post newPost)
    {

        Post post = new Post();
        post.PostId = newPost.PostId;
        post.Title = newPost.Title;
        post.Body = newPost.Body;
        post.Hidden = newPost.Hidden;

        db.Posts.Add(post);
        db.SaveChanges();

        return db.Posts.FirstOrDefault();
    }

API CONTROLLER

// PUT api/<controller>/5
    [Authorize(Roles = "Admin")]
    public IHttpActionResult Put(int id, [FromBody]Post newPost)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        return Ok(_adapter.PutNewPost(id, newPost));
    }

错误消息

TypeError: undefined is not a function
at h.$scope.updatePost (https://localhost:44301/MyScripts/AjaxPostController.js:40:14)
at https://localhost:44301/Scripts/angular.min.js:169:382
at https://localhost:44301/Scripts/angular.min.js:186:390
at h.$eval (https://localhost:44301/Scripts/angular.min.js:108:40)
at h.$apply (https://localhost:44301/Scripts/angular.min.js:108:318)
at HTMLInputElement.<anonymous> (https://localhost:44301/Scripts/angular.min.js:186:372)
at HTMLInputElement.o.event.dispatch (https://localhost:44301/Scripts/jquery-2.1.0.min.js:3:6055)
at HTMLInputElement.r.handle (https://localhost:44301/Scripts/jquery-2.1.0.min.js:3:2830) 

1 个答案:

答案 0 :(得分:1)

我认为$ resource的方法参数是错误的。将所有自定义方法返回到1个对象中,如下所示:

app.factory('Post', function ($resource) {

return $resource('/api/apiPost/:id',
    { id: '@id' },
    { 
        'save': { method: 'POST' },
        'update': { method: 'PUT' },
        'query': { method: 'GET', isArray: false }
    }
);