2012-09-20 13 views
30

के साथ PUT और DELETE के लिए CORS समर्थन I जावास्क्रिप्ट-अनुकूल API को कार्यान्वित करने के लिए एएसपी.NET वेब एपीआई के अंतिम संस्करण के साथ काम कर रहा हूं। इसके बाद के संस्करण, क्रॉस-डोमेन प्राप्त और पोस्ट अनुरोध ठीक से काम के साथएएसपी.NET वेब एपीआई

<system.webServer> 
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
    </customHeaders> 
</httpProtocol> 
</system.webServer> 

, लेकिन रख दिया और अनुरोध DELETE दोनों असफल: विभिन्न ट्यूटोरियल के अनुसार, मैं अपने web.config में CORS सक्षम है।

Chrome में:

विधि PUT पहुंच-नियंत्रण-अनुमति दें-तरीके से अनुमति नहीं है।

एक्सेस-कंट्रोल-अनुमति-विधियों द्वारा विधि DELETE की अनुमति नहीं है।

क्या पुट पाने और क्रॉस-डोमेन काम करने वाले क्रियाएं हटाने के लिए कुछ अतिरिक्त आवश्यक है?

+1

आप अपने webconfig में CORS सक्षम कैसे किया में उपयोग न? – Rushino

+0

क्या आपके पास वैश्विक कोर हैंडलर भी है? या आपने वेब.कॉन्फिग में केवल सीओआरएस को ठीक किया है? –

+0

मैंने इसे web.config स्तर पर ही कार्यान्वित किया। –

उत्तर

40

यह एक और कस्टम हेडर जोड़ने की तरह लग रहा है कि यह हल:

<system.webServer> 
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
    </customHeaders> 
</httpProtocol> 
</system.webServer> 
+1

यह मेरे लिए काम नहीं करता है। केवल जीईटी और पोस्ट के लिए काम करता है। –

21

इसके अलावा, नाथन जवाब के अलावा, सुनिश्चित करें कि आप विकलांग WebDAV आईआईएस मॉड्यूल बनाने के लिए और web.config में runAllManagedModulesForAllRequests="true" सेटिंग सेट:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <remove name="WebDAVModule"/> 
    </modules> 
    <handlers> 
    <remove name="WebDAV" /> 
    </handlers> 
</system.webServer> 

इसके बिना, preflight CORS requests (जिसे पुट के लिए उपयोग किया जाता है, विधियों को हटाएं और अतिरिक्त विकल्प अनुरोध भेजें) काम नहीं करेंगे।

+0

आह धन्यवाद! मेरा कॉर्स हैंडलर web.config में कोड की उन पंक्तियों के बिना काम नहीं कर रहा था। –

+3

'वेबडीवीवी हैंडलर क्या कर रहा है, और इसे हटाने की आवश्यकता क्यों है? –

+0

धन्यवाद दस लाख! –

6

WEBAPI2.2 में कोरस मुद्दे को दूर करने के लिए बहुत आसान समाधान।

आप में निम्नलिखित वेबएपीआई कॉन्फ़िगर फ़ाइल जोड़ें।

var cors = new EnableCorsAttribute("*", "*", "*"); 
Config.EnableCors(cors); 

यह जोड़ने से पहले सुनिश्चित करें कि आप Web.config फ़ाइल में कस्टम शीर्षलेख हटा दें।

<add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Credentials" value="true" /> 
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, X-Token" /> 
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" /> 

तुम दोनों customheader रूप में अच्छी तरह CORS WebApiconfig में सक्षम है, तो आप CORS त्रुटि का सामना करना पड़ेगा।

वेबएपीआई कॉन्फ़िगरेशन में सक्षम कॉर्स को समस्या हल करें।

+1

यह एक अच्छा वर्तमान समाधान और एक अच्छा स्पष्टीकरण है।जैसा कि आपने बताया है कि दोनों कॉन्फ़िगरेशन मौजूद नहीं हैं (WebApiConfig.cs _and_ Web.config) या CORS कॉन्फ़िगरेशन में एक संघर्ष होगा और परिणाम 'पहुंच'-नियंत्रण-अनुमति-उत्पत्ति 'शीर्षलेख में एकाधिक मान' http: // localhost: 1234, * ', लेकिन केवल एक की अनुमति है।' त्रुटि। – atconway

+2

इसके अलावा, किसी को 'EnableCorsAttribute' क्लास का उपयोग करने के लिए निम्नलिखित NuGet पैकेज की आवश्यकता है: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Cors – atconway

0

web.config में इस का उपयोग करें जब आप अपने आवेदन को तैनात किया, स्थानीय web.config

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
     </customHeaders> 
    </httpProtocol> 
<ModSecurity enabled="false" configFile="C:\inetpub\wwwroot\owasp_crs\modsecurity.conf" /> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 

    </system.webServer> 
संबंधित मुद्दे