选项然后POST执行两次动作

时间:2013-06-21 22:25:23

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

当我从我的客户端向另一个项目的web api创建一个$ http.post时,firebug和chrome都会显示一个OPTIONS方法,然后显示一个POST方法。

问题
两个请求都实际执行我的API操作。如果我限制为POST,则OPTIONS失败并且帖子永远不会发生。我在角度和webapi都打开了CORS。

我的app.js有以下几行:

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With']; 

我的api电话:

    $scope.add = function () {
        var role = { Name: 'admin' };
        $http.post('http://localhost:7514/Roles/add', role).
            success(function () {
                alert('RolesController.add');
            }).
            error(function (message) {
                alert('FAILED EXECUTE RolesController.add');
            });
    };

webapi web.config

<system.webServer>
...
<!-- added for cors handling, remove when using a dedicated cors handler or the system.web.cors dll-->
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*"/>
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
  </customHeaders>
</httpProtocol>
</system.webServer>

1 个答案:

答案 0 :(得分:0)

如果您使用每晚的CORS包,OPTIONS请求将被一个消息处理程序拦截,该处理程序不执行该操作,但仍会发送相应的响应头。有关更多信息以及如何使用夜间软件包,您应该查看有关获取CORS nightly软件包的博客文章。

http://blogs.msdn.com/b/yaohuang1/archive/2013/04/05/try-out-asp.net-web-api-cors-support-using-the-nightly-builds.aspx

确保从下拉菜单中选择“预售”。