0

我已将问题隔离为几行。使用 IIS express 它调用 web API 上的 PUT。当我切换到使用具有相同代码的 IIS 时,对 PUT 方法的调用永远不会发生.. GET 调用适用于两者都很好.. 知道吗?

  $scope.save = function (msa) {
        $scope.msa = msa;
        var id = this.msa.PlaceId;

        Msa.update({ id: id }, $scope.msa, function () {
            alert('finished update'); //only gets here with iis express
            $scope.updatedItems.push(id);
            $location.path('/');
        });
    }

MsaApp.factory('Msa', function ($resource) {
    return $resource('/api/Place/:id', { id: '@id' }, { update: { method: 'PUT' } });
});

编辑1:

我认为它正在工作,但现在它只在'localhost'而不是计算机名称时才有效..它没有调用服务器方法..任何想法要注意哪些事情会使站点的行为与 localhost 不同?.. 甚至更奇怪.. 角度网站不会在 IE 中加载.. 但它会在 chrome 中加载

编辑2:

我想我有答案.. 露水 webapi PUT/UPDATE 创建无效代码.. 它有点随机会在 db.Entry(place).State = EntityState.Modified 处中断...我在这里找到了似乎可以修复它的代码到目前为止..虽然不完全确定它的作用

ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象

4

2 回答 2

1

默认情况下,IIS 确实阻止了一些操作,我相信 PUT 是一个(DELETE 是另一个)。

请参阅:https ://stackoverflow.com/a/12443578/1873485

Go to Handler Mappings in your IIS Manager. Find ExtensionlessUrlHandler-Integrated-4.0, double click it. Click Request Restrictions... button and on Verbs tab, add both DELETE and PUT.

于 2013-08-29T22:05:39.067 回答
1

WebDAV从 IIS 中删除模块,它应该可以工作

于 2013-08-30T06:53:49.793 回答