400 Bad Request(Angular + WebAPI)遇到问题

时间:2015-03-29 15:32:24

标签: javascript angularjs asp.net-web-api

我正在通过尝试构建跟踪漫画的数据库来学习。我可以发布新漫画并毫不费力地获取它们。但是当我想要PUT时,我遇到了一个问题。我一直收到一个错误的请求,但我认为所有信息都是正确的。我认为我的所有信息都匹配,但我不确定还有什么不对。

我要做的就是更新漫画列表,以便跟踪漫画的实体和数字副本。

提前致谢。

这是我的DBController.cs:

 [Authorize]
    public IHttpActionResult Put(Comic comic)
    {
        string UserId = User.Identity.GetUserId();
        if (UserId == null) return BadRequest("You Must Be Logged In to Edit");

        else if (comic.UserId == UserId || User.IsInRole("Admin"))
        {

            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                var currentComic = db.Comics.Find(comic.ComicId);
                currentComic.IsDigital = comic.IsDigital;
                currentComic.IsPhysical = comic.IsPhysical;
                db.SaveChanges();
            }
            return Ok();
        }

        else return BadRequest("Insufficient privileges");
    }
}

这是我的CollectionController.js:

$scope.physical = false;
$scope.digital = false;

$scope.updateComic = function (ComicId) {
        var comic = {
            ComicId: ComicId,
            IsPhysical: $scope.physical,
            IsDigital: $scope.digital,
            }
 return MarvelApiFactory.editComic(comic).then(function (data) {
        })
}

我的ApiFactory.js

 var editComic = function (comic) {

          var deferred = $q.defer();

          $http({
              url: '/api/ComicDB',
              method: "PUT",
              headers: { Authorization: "Bearer " + localStorage.getItem('token') },
              data: comic
          }).success(function () {
              deferred.resolve();
          }).error(function () {
              deferred.reject();
          })
          return deferred.promise;
      }



return {
        editComic: editComic,
    }

这是我的.html:

<button class="btn btn-danger"  ng-click="updateComic(x.ComicId)">Save</button>

最后,我的错误消息。对不起,不太确定你需要的方式/用途。昨晚,当我想到这一点时,我点击了网络选项卡,并且可以找到内部异常等等。这次我无法找到它们,或者我没有得到它们。但这来自我的JS控制台:

PUT http://localhost:53612/api/ComicDB 400 (Bad Request)angular.js:9827 (anonymous function)angular.js:9628 sendReqangular.js:9344 serverRequestangular.js:13189 processQueueangular.js:13205 (anonymous function)angular.js:14401 Scope.$evalangular.js:14217 Scope.$digestangular.js:14506 Scope.$applyangular.js:21440 (anonymous function)jquery-1.10.2.js:5109 jQuery.event.dispatchjquery-1.10.2.js:4780 elemData.handle

1 个答案:

答案 0 :(得分:0)

默认情况下,IIS Express和IIS8中未启用PUT和DELETE。您可以按照以下步骤启用这些动词:

  1. 打开计算机上的applicationHost.config文件 运行Web Api应用程序。该文件位于%userprofile%\ documents \ IIS {Express | 8} \ config“。

  2. 向下滚动到IIS的底部 applicationHost.config文件并查找处理程序条目 以:

    开头
    <add name="ExtensionlessUrl-Integrated-4.0"...`. 
    
  3. 在“verb”属性中添加PUT和DELETE以使“动词”属性 看起来像:verb =“GET,HEAD,POST,DEBUG,PUT,DELETE”