【问题标题】:AngularJS changes the url depending on method (Get, Put)AngularJS 根据方法(Get、Put)更改 url
【发布时间】:2014-11-28 14:10:42
【问题描述】:

我在 Angular 中使用工厂将 ajax 请求绑定到我的 web api。工厂是这样的。

app.factory('QuestionContainer', ['$resource', function ($resource) {
return $resource('http://localhost:52133/api/questioncontainerapi/:id', null,
    {
        'update': { method: 'PUT' },
        'publish': { method: 'Put', url: 'http://localhost:52133/api/questioncontainerapi/:id/Publish/' }
    });
}]);

如您所见,我已将:id 放在 url 中的两个操作之间,方法当前为 Put。如果我在我的控制器中使用这样的工厂 ->

QuestionContainer.publish({ id: 1 });

请求 url 是 http://localhost:52133/api/questioncontainerapi/Publish/,正文为 { id: 1 }。如果我改为使用 Get 方法,请求 url 将更改为 http://localhost:52133/api/questioncontainerapi/1/Publish/,这就是我想要的 url。

如何让 Angular 理解这一点? 谢谢!

【问题讨论】:

    标签: javascript angularjs http-headers


    【解决方案1】:

    你需要指定参数,试试下面的代码:

    app.factory('QuestionContainer', ['$resource', function ($resource) {
    return $resource('http://localhost:52133/api/questioncontainerapi/:id', {id: '@id'},
        {
            'update': { method: 'PUT' },
            'publish': { method: 'Put', url: 'http://localhost:52133/api/questioncontainerapi/:id/Publish/' }
        });
    }]);
    

    jsfiddle

    在控制台中你可以看到请求

    说明

    网址:/some/:param

    必须定义参数,所以我们说{param: 'text'},在这种情况下,url 将始终解析为/some/text..

    但是如果我们想要基于我们指定的变量的动态 url:{param: '@p'} 其中 p 是属于实例资源或传递给类资源的数据对象的变量。

    QuestionContainer.publish({ id: 1 }); // {id: 1} is the data object
    

    因此,如果我们想要 /some/3,我们可以这样做:

    QuestionContainer.publish({ p: 3 }); // class
    var question = new QuestionContainer({p: 3}); // or new QuestionContainer(); question.p = 3;
    question.$publish();
    

    官方页面可以在此扩展更多:$resource

    【讨论】:

    • 有效!为什么我必须这样做?
    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 2022-10-24
    • 2015-11-09
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多