我正在通过尝试构建跟踪漫画的数据库来学习。我可以发布新漫画并毫不费力地获取它们。但是当我想要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
答案 0 :(得分:0)
默认情况下,IIS Express和IIS8中未启用PUT和DELETE。您可以按照以下步骤启用这些动词:
打开计算机上的applicationHost.config文件 运行Web Api应用程序。该文件位于%userprofile%\ documents \ IIS {Express | 8} \ config“。
向下滚动到IIS的底部 applicationHost.config文件并查找处理程序条目 以:
开头<add name="ExtensionlessUrl-Integrated-4.0"...`.
在“verb”属性中添加PUT和DELETE以使“动词”属性 看起来像:verb =“GET,HEAD,POST,DEBUG,PUT,DELETE”