2012-10-22 71 views
0

我正在使用IIS 7.5与asp.net webapi做记录ID删除。我可以在Safari中使用它,但不能使用Firefox。下面是jQuery的阿贾克斯提交请求/响应的图像:ASP.Net WebAPI删除动词不工作

http://screencast.com/t/Ckls9nO8D

这是我为我的jQuery删除提交的代码片段:

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。请帮忙。

它似乎访问控制请求标头从请求标题丢失。我不确定这是否是问题的原因。

在Safari和Chrome这个玩弄后,我收到“拒绝设定不安全头‘访问控制请求报头’ OPTIONS http://local.guessalist.com/api/game/64 405(不允许的方法)”通过浏览器的错误在每个浏览器控制台,但允许删除操作继续。不知道我在这里做什么。任何建议将不胜感激。

回答

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进行测试。所以,我很感激我可以让我的代码工作,但我想知道为什么它的工作原因是我只做了上面链接中引用的部分配置。如果有人绊倒这一点,并可以解释,我将不胜感激。谢谢。

+0

[这篇文章](http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html)建议不要使用这种技术。它也提供了解决方法。 –