2016-09-19 75 views
0

真的和这个错误混淆了。带OWIN的Web API,预检请求返回OK,但实际请求返回405. PUT,DELETE不允许

我正在使用Web Api和OAuth进行用户验证。对网站的第一个请求是用户注册POST请求,它正确执行。 我发送第二请求是使用用户凭据PUT请求以激活用户,为此,预检请求返回OK但实际PUT请求返回不携带405方法和No Access-Control-Allow-Origin首标出现错误。
托管前一切正常。此错误仅在托管API中发生。我还用localhost:portNo/api(即在本地主机上运行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
实际响应如下:
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

供参考:客户端是用角度制作的。也删除了一些链接http,因为stackoverflow不允许我。

请让我知道如果有什么我错过了关于CORS。并详细说明为什么它在本地工作,而不是在Hosted api中工作。

回答

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,DELETE不允许,直到我说这个配置。