Angularjs $resource 多个职位

发布时间: 2017/4/30 22:44:34
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我已经有很多 Web Api Post methods 像︰

    [HttpPost]
    public async Task<IHttpActionResult> Post([FromBody] AdModel adModel)
    {
        //Post
    }

    [HttpPost]
    [Route("AddToWatchList")]
    public async Task<IHttpActionResult> AddToWatchList(int adId)
    {
        // Post to database
    }

这里是我的 AngularJs 服务器︰

app.factory('adService', ['$resource', 'ngAuthSettings', function ($resource, ngAuthSettings) {

      var serviceBase = ngAuthSettings.apiServiceBaseUri;

return $resource(serviceBase + 'api/Ads/', {}, {
            addToWatchList: {
            method: 'POST',
            url: serviceBase + 'api/Ads/addToWatchList'
           }
        }
    });
}]);

AngularJs 控制器︰

app.controller('listCategoryAdsController',
    ['ngAuthSettings', '$scope', 'adService', '$routeParams', '$location',
    function (ngAuthSettings, $scope, adService, $routeParams, $location) {

    $scope.addToWatchlist = function (adId) {
        adService.addToWatchList({ adId: adId }).$promise.then(
            function(result) {
                var path = $location.path();
                $location.path(path).search('nw', 1);
            },
            function (error) {

        });
    };

我从哪里我打电话方法的 Html:

<div class="col-sm-3 text-right price-box" data-ng-repeat="ad in Ads">
     <h2 class="item-price">
         $ {{ad.price}}
     </h2>
     <i class="fa fa-certificate">
     </i>
     <a ng-click="addToWatchlist(ad.adId)" class="btn btn-default  btn-sm make-favorite" tooltip="Click to add to watch list"
           tooltip-placement="left"
           tooltip-trigger="mouseenter">
          <i class="fa fa-heart"></i>
           <span>Watch list</span>
     </a>
</div>

我的问题是 Post([FromBody] AdModel adModel) 堪称完美。但当我调用 AddToWatchList(int adId) 我得到︰

邮政http://localhost:8081/api/广告/addToWatchList 404 (未找到)

解决方法 1:

您正在向 AddToWatchList() 发送简单类型 (int),因此 Web API 正在照镜子了,感觉好参数的 URI。

如果参数是简单类型,Web API 试图从 URI 的值。简单类型包括.NET 基元类型 (int,bool,双,等等),再加上时间跨度、 日期时间、 Guid,十进制,和字符串,以及任何类型的可以从字符串转换的类型转换器。(更多有关类型转换器后。)对于复杂类型,Web API 尝试读取邮件正文中的值,使用媒体类型的格式化程序。 在此多...

你有几个选项︰

1-发送通过 URI,感觉好...api/广告/addtowatchlist? 感觉好 = 123

$resource(serviceBase + 'api/Ads/addToWatchList', { }, {
    addToWatchList: { method:'POST', params:{ adId:adId } }
});

2-显然使用一个复杂的对象,如你在第一种方法做。虽然它摸起来傻上课与一个 int 类型的财产,这就是为什么不喜欢这种方法。但如果你已经有一个广告类,没有什么不妥重用它。


3-尝试此解决方案中,你将需要添加到您的 int 参数的 [FromBody]。和发送与没有标识符,感觉好

=123
赞助商