带有OWIN的Web API,Preflight请求返回OK但实际请求返回405.不允许PUT,DELETE

时间:2016-09-19 14:10:59

标签: asp.net api web-config owin

真的对这个错误感到困惑。

我正在使用Web Api和OAuth进行用户身份验证。对站点的第一个请求是用户注册POST请求,该请求正确执行。 我发送的第二个请求是PUT请求,其中包含激活用户的用户凭据,预检请求返回final XPathExpression expr = prepareXpathContext() .compile(/Roottag/ParentTag/ChildTag[Name='Safari Package']/Animal[DisplayVal[@avaliable='EC']/Value='true']/*"); ,但实际的PUT请求返回OK方法不允许且没有405标头是目前的错误。
在托管之前一切正常。仅在托管API中发生此错误。我还使用Access-Control-Allow-Origin检查了托管客户端(即在本地主机中运行api并从托管客户端应用程序访问它),它工作正常。仅在托管应用程序中出现错误。

预检请求如下:
localhost:portNo/api
飞行前响应如下:
Request URL: api.oorvalam.com/user/activate Request Method:OPTIONS Status Code:200 OK
实际要求:
Accept:/ Accept-Encoding:gzip, deflate, sdch Accept-Language:en-US,en;q=0.8,ta;q=0.6 Access-Control-Request-Headers:content-type, userlanguage Access-Control-Request-Method:PUT Cache-Control:no-cache Connection:keep-alive Host:api.oorvalam.com Origin:http://web.oorvalam.com Pragma:no-cache Referer:web.oorvalam.com/setPassword
实际答复如下:
Request URL:api.oorvalam.com/user/activate Request Method:PUT Status Code:405 Method Not Allowed

仅供参考:客户端采用棱角分明。还删除了一些链接http,因为stackoverflow不允许我这样做。

如果有任何关于CORS的遗漏,请告诉我。并详细说明为什么它在本地工作而不在Hosted api中工作。

1 个答案:

答案 0 :(得分:0)

经过大量搜索,我发现这是与web.config中的配置相关的错误。

答案与此答案类似。 https://stackoverflow.com/a/19722942/5003227

我在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,在我添加此配置之前不允许删除。