Javascript Angularjs$资源多个帖子

Javascript Angularjs$资源多个帖子,javascript,.net,angularjs,asp.net-web-api,angular-resource,Javascript,.net,Angularjs,Asp.net Web Api,Angular Resource,我有多种Web Api Post方法如: [HttpPost] public async Task<IHttpActionResult> Post([FromBody] AdModel adModel) { //Post } [HttpPost] [Route("AddToWatchList")] public async Task<IHttpActionResult> AddToWatchList

我有多种
Web Api Post方法
如:

    [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.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) {

        });
    };
<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>
从何处调用我的Html方法:

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) {

        });
    };
<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>

${{ad.price}}
404(未找到)


您正在向AddToWatchList()发送一个简单类型(int),因此Web API正在URI中查找adId参数

如果参数是“简单”类型,Web API将尝试获取该值 从URI。简单类型包括.NET基本类型(int, bool、double等),加上TimeSpan、DateTime、Guid、decimal, 和字符串,再加上任何具有可从 一串。(有关类型转换器的详细信息,请稍后。)对于复杂类型,请访问Web API尝试使用媒体类型从消息正文读取值 格式化程序。

您有几个选择:

1-通过URI发送adId。。。api/ads/addtowatchlist?adId=123


2-显然,在第一种方法中使用复杂对象。虽然让一个类只有一个int属性感觉很傻。。。这就是为什么你和我不喜欢这种方法。但是,如果您已经有了一个Ad类,那么重用它并没有什么错


3-尝试将[FromBody]添加到int参数的要求。并在没有标识符的情况下发送adId

=123

服务器webapi控制器上设置的基本路由是什么?您还可以将webapi函数重命名为
PostAddToWatchList
,然后重试。基本路由是[RoutePrefix(“api/Ads”)]