C#AngularJs HttpDelete无效

时间:2016-02-11 14:39:29

标签: c# angularjs asp.net-web-api

我正在使用C#Web Api和AngularJs。如果我添加

<modules runAllManagedModulesForAllRequests="true">
 <remove name="WebDAVModule" />
</modules>

删除请求适用于fiddler,但是当它从angularJs调用它时,我得到一个错误,即选项未定义。默认情况下,选项调用由angular进行。

如果我不添加上面的代码表格,HttpDelete不起作用。我有一个响应头像:

Allow: GET, HEAD, OPTIONS, TRACE
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS

我正在使用$ resource从AngularJS调用web api。来自web api并删除了webDavModule的web.config如下所示:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="WebDAVModule"/>
  </modules>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="TRACEVerbHandler" />
    <remove name="WebDAV"/>
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />    
  </handlers>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="X-Requested-With, accept, content-type" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Google Chrome上的请求如下:this

你知道我为什么会遇到这个问题吗?

1 个答案:

答案 0 :(得分:0)

似乎您正在localhost:<port>托管您的AngularJs应用程序。您的Web Api必须使用包含localhost:<port>的Access-Allow-Control-Origin进行响应。

当您在不同的端口上托管时,您的浏览器会使用HTTP OPTIONS发送飞行前请求。 Web API也必须允许HTTP OPTIONS动词。

http://www.html5rocks.com/en/tutorials/cors/

您还可以查看Chrome开发者工具控制台。 Chrome必须在此情况下将错误消息写入控制台。它回答你HTTP 405它意味着OPTIONS HTTP Verb是不允许的,尽管它是响应Access-Control-Allow-Headers头。 IIS添加了HTTP标头,但HTTP 405来自您的服务。

例如,在我的OAuth / JWT服务实现中,由于奇怪的Chrome + localhost:<port>和预检请求,我需要编写逻辑以在开发环境的OPTIONS动词上响应HTTP 200。