1

好的,我已经为此奋斗了几个小时。我使用 .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() 方法时遇到问题。

我收到的错误是:

“在控制器 'No​​tes' 上找不到与请求匹配的操作”

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

有接盘侠吗?:-)

4

1 回答 1

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

于 2013-06-02T15:08:45.747 回答