Web API 与 OWIN,预检请求 returns OK 但实际请求 returns 405。不允许 PUT、DELETE

Web API with OWIN, Preflight request returns OK but actual request returns 405. PUT, DELETE not allowed

真的被这个错误弄糊涂了。

我正在使用 Web Api 和 OAuth 进行用户身份验证。对站点的第一个请求是用户注册 POST 请求,该请求可以正确执行。 我发送的第二个请求是带有用于激活用户的用户凭据的 PUT 请求,为此预检请求 returns OK 但实际的 PUT 请求 returns 405 Method not Allowed 和没有 Access-Control-Allow-Origin header 存在错误。
托管前一切正常。此错误仅发生在托管 API 中。我还使用 localhost:portNo/api 检查了托管客户端(即本地主机中的 运行 api 并从托管客户端应用程序访问它)并且它工作正常。错误仅发生在托管应用程序中。

预检要求如下:
Request URL: api.oorvalam.com/user/activate Request Method:OPTIONS Status Code:200 OK
预检响应如下:
接受:<em>/</em> Accept-Encoding:gzip, deflate, sdch Accept-Language:en-US,en;q=0.8,ta;q=0.6 Access-Control-Request-Headers:content-type, 用户语言 Access-Control-Request-Method:放 Cache-Control:no-cache Connection:keep-还活着 Host:api.oorvalam.com 来源:<a href="http://web.oorvalam.com" rel="nofollow">http://web.oorvalam.com</a> Pragma:no-缓存 Referer:web.oorvalam.com/setPassword
实际要求:
Request URL:api.oorvalam.com/user/activate Request Method:PUT Status Code:405 Method Not Allowed
实际响应如下:
Allow:GET, HEAD, OPTIONS, TRACE Cache-Control:private Content-Length:5293 Content-Type:text/html; charset=utf-8 Date:Mon, 19 Sep 2016 13:30:09 GMT Server:Microsoft-IIS/8.5 X-Powered-By:ASP.NET X-Powered-By-Plesk:PleskWin

仅供参考:客户端是用 angular 创建的。还删除了一些 http 链接,因为 Whosebug 不允许我这样做。

如果我错过了关于 CORS 的任何内容,请告诉我。并详细说明为什么它在本地工作而不在 Hosted api.

中工作

查了很多才知道是web.config配置的错误。

答案和这个答案类似


我在web.config最后的<web.server>如下:

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="OPTIONSVerbHandler"/>
  <remove name="TRACEVerbHandler"/>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpErrors errorMode="Detailed"></httpErrors>
<asp scriptErrorSentToBrowser="true"></asp>

在我添加此配置之前不允许 PUT、DELETE。