【问题标题】:AngularJS resource and put methodAngularJS 资源和 put 方法
【发布时间】:2013-05-28 19:37:04
【问题描述】:

好的,我已经为此奋斗了几个小时。我使用 .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 文档,但无济于事。

有接受者吗? :-)

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 谢谢!在意识到应该通过查询字符串传入简单类型后,我对资源定义进行了一些修改:app.factory('NotesFactory', function ($resource) { return $resource('/api/Notes/', {日期:'@date',注释:'@notes'},{更新:{方法:'PUT'}});});这告诉资源日期和注释参数是通过查询字符串传递的,而不是作为正文的一部分。现在一切都按预期工作,我不必编写 POCO 来携带数据。您提供的链接很好阅读。
    • 如果有帮助就太好了,但解决方案是你的! ;)
    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多