AngularJS资源和put方法

时间:2013-06-02 13:55:31

标签: rest angularjs asp.net-web-api put angular-resource

好吧,我几个小时以来一直在和它作斗争。我使用.NET Web API作为后端,我必须承认我并不完全理解这个东西是如何工作的。我发现REST api非常隐含,当事情有效时,它们会因为一些魔法而起作用,也就是说,因为函数名称以Get开头,然后发生等等。

这是我正在尝试做的事情:

在我的Web API控制器(NotesController)中,我有这个方法:

public HttpResponseMessage Put(string date, string notes)

它收到格式为yyyy-MM-dd的日期和一些任意文本。

我已经按照现在的方式在Angular中声明了我的资源:

App.factory('NotesFactory', function ($resource) {
    return $resource('/api/Notes/', {}, { update: { method: 'PUT' } });
});

最后,我的Angular笔记控制器上有一个saveNotes()方法,如下所示:

$scope.saveNotes = function ()
{
    NotesFactory.update({ date: date, notes: $scope.notes }, function () {
    ...
    });
}

我在使用update()方法在Web API中正确调用Put()方法时遇到问题。

我收到的错误是:

  

“在控制器'Notes'上找不到匹配的操作   请求“

正如我所说,我不确定这究竟应该如何运作。如果有人能提供一个适合我情况的具体例子,那真的很高兴。我已经来回阅读$ resource文档无济于事。

任何接受者? : - )

1 个答案:

答案 0 :(得分:1)

angular会将您的请求作为JSON传递到正文中:

{ 
"date": "2013-06-03", 
"notes": "My notes" 
}

所以最合适的是创建一个表示这些值的对象:

public class MyObject
{
    public DateTime Date { get; set; }
    public string Notes { get; set; }
}

然后调整方法签名

public HttpResponseMessage Put(MyObject obj)

Web API将反序列化消息的内容(正文中的JSON)并创建MyObject的实例。当这些参数是URL的一部分时,具有简单类型的签名将非常有用。请阅读此阅读以获取更多详细信息http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection