C# AngularJs HttpDelete 不起作用

本文关键字:不起作用 HttpDelete AngularJs | 更新日期: 2023-09-27 18:34:16

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

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

删除请求从小提琴手工作,但是当涉及到从angularJs调用它时,我遇到了一个错误,即选项未定义。默认情况下,选项调用由角度完成。

如果我不添加上面的代码表单,则 HttpDelete 不起作用。我得到了一个响应标头,如下所示:

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

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

<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>

谷歌浏览器上的请求看起来像:这个

你知道为什么我有这个问题吗?

C# AngularJs HttpDelete 不起作用

似乎是

您正在localhost:<port>上托管您的 AngularJs 应用程序。您的 Web API 必须使用包含您的localhost:<port>的访问-允许-控制-源进行响应。

当您托管在不同的端口上时,您的浏览器会发送带有 HTTP 选项的预检请求。Web API 也必须允许 HTTP 选项谓词。

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

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

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