真的对这个错误感到困惑。
我正在使用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中工作。
答案 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,在我添加此配置之前不允许删除。