1

我正在使用带有 asp.net webapi 的 IIS 7.5 来删除记录 ID。我可以让它在 Safari 中工作,但不能在 Firefox 中工作。这是 jQuery Ajax 提交的请求/响应的图像:

http://screencast.com/t/Ckls9nO8D

这是我的 jQuery Delete 提交的代码片段:

    var deleteGame = function(gameId)
    {       
        var d = $.Deferred();
        var url = Enum.RootUrl + Enum.DeleteGameUrl + gameId;
        jQuery.support.cors = true;
        $.ajax(
        {
            url: url,
            type: 'Delete',
            cache: false,
            crossDomain: true,
            processData: true,
            success: function () 
            {
                d.resolve();
            },
            error: function(XMLHttpRequest, textStatus, errorThrown)
            {
                //alert("error happened AGAIN:\n" + JSON.stringify(XMLHttpRequest) );
            }
        });

        return d.promise();
    };

这是生成的 jquery 提交 URL: http ://local.guessalist.com/api/game/46

我不确定为什么它适用于 Safari 而不是 Firefox。请帮忙。

请求标头中似乎缺少 Access-Control-Request-Headers。我不确定这是否是问题的原因。

在 Safari 和 Chrome 中玩过这个之后,我得到“拒绝设置不安全的标头”Access-Control-Request-Headers”选项http://local.guessalist.com/api/game/64 405(不允许的方法)" 通过浏览器的控制台在每个浏览器中出现错误,但允许继续删除操作。不知道我在这里做什么。任何建议将不胜感激。

4

1 回答 1

1

经过几个小时的研究、故障排除、诅咒和关闭我的代码,我终于在这种方法的帮助下让它工作了:

http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-thinktecture-identitymodel/

我最初只尝试了 WebAPI 方法,但没有成功。然后我删除了我正在尝试的所有内容,并按照上面链接中描述的 IIS 方法进行操作,一切正常。我不确定为什么。我只将这行代码添加到 Web.Config 中,没有其他内容:

    <modules runAllManagedModulesForAllRequests="true">
        <add name="CorsHttpModule" type="Thinktecture.IdentityModel.Http.Cors.IIS.CorsHttpModule"/>
    </modules>

这是我做的唯一配置,我可以进行跨域删除。我假设其他动词也可以,我只用 Delete 测试过。所以,我很感激我可以让我的代码工作,但我想知道为什么它可以工作,因为我只做了上面链接中引用的部分配置。如果有人偶然发现这一点并可以解释,我将不胜感激。谢谢。

于 2012-10-22T05:56:43.750 回答