ASP.Net WebAPI删除动词不起作用

时间:2012-10-22 01:46:39

标签: jquery cross-domain asp.net-web-api cors

我正在使用带有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(方法不允许)“通过浏览器的控制台在每个浏览器中出错,但允许删除操作继续。不确定我在这里做什么。任何建议都将非常感谢。

1 个答案:

答案 0 :(得分: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>

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