我正在使用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
你知道我为什么会遇到这个问题吗?
答案 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。