2016-09-19 70 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不允許,直到我說這個配置。