我正在使用带有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(方法不允许)“通过浏览器的控制台在每个浏览器中出错,但允许删除操作继续。不确定我在这里做什么。任何建议都将非常感谢。
答案 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>
这是我做的唯一配置,我可以跨域删除。我假设其他动词会起作用,我只测试了删除。所以,我很高兴我可以让我的代码工作,但我想知道为什么它的工作,因为我只做了上面链接中引用的部分配置。如果有人偶然发现并可以解释,我将不胜感激。感谢。