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>
谷歌浏览器上的请求看起来像:这个
你知道为什么我有这个问题吗?
您正在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>
和预检请求的奇怪星座。