IIS7 पर क्रॉस-ऑरिजनल रिसोर्स शेयरिंग को सक्षम करना


89

मैं हाल ही में एक अन्य डोमेन पर जावास्क्रिप्ट अनुरोध पोस्ट करने के साथ भाग गया। डिफ़ॉल्ट रूप से XHR अन्य डोमेन पर पोस्ट करने की अनुमति नहीं है।

Http://enable-cors.org/ के निर्देशों का पालन करते हुए , मैंने इसे अन्य डोमेन पर सक्षम किया।

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
    </customHeaders>
  </httpProtocol>
 </system.webServer>
</configuration>

यहाँ छवि विवरण दर्ज करें

सब कुछ अब ठीक काम करता है, हालांकि काम करने वाली 200 प्रतिक्रिया को वापस भेजने से पहले यह 405 प्रतिक्रिया दे रहा है।

Request URL:http://testapi.nottherealsite.com/api/Reporting/RunReport
Request Method:OPTIONS
Status Code:405 Method Not Allowed
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:origin, content-type, accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:testapi.nottherealsite.com
Origin:http://test.nottherealsite.com
Referer:http://test.nottherealsite.com/Reporting
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Response Headersview source
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Origin:*
Allow:POST
Cache-Control:private
Content-Length:1565
Content-Type:text/html; charset=utf-8
Date:Tue, 18 Sep 2012 14:26:06 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

अपडेट: 3/02/2014

MSDN पत्रिका में हाल ही में अद्यतन लेख है। ASP.NET वेब API 2 में कॉर्स सपोर्ट का पता लगाना।

http://msdn.microsoft.com/en-us/magazine/dn532203.aspx


इसने jQuery के बूटग्रिड प्लगइन के गलत तरह के आइकन को प्राप्त करने की मेरी समस्या को हल कर दिया है। मैं बूटस्ट्रैप फोंट फ़ोल्डर से ग्लाइफ़िकॉन-आधालिंग-रेगुलर लोड करना चाहता हूं
इमान

जवाबों:


77

यह संभावना है कि आपके आवेदन को निर्दिष्ट करने के बजाय IIS 7 'HTTP हैंडलिंग' प्रतिक्रिया के 'हैंडलिंग' का मामला है। इसे निर्धारित करने के लिए, IIS7 में,

  1. अपनी साइट के हैंडलर मैपिंग पर जाएं।

  2. नीचे स्क्रॉल करें 'OPTIONSVerbHandler'।

  3. 'ProtocolSupportModule' को 'IsapiHandler' में बदलें

  4. निष्पादन योग्य सेट करें:% windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll

अब, जब HTTP विकल्प क्रिया भेजी जाती है, तो ऊपर दी गई आपकी कॉन्फिग एंट्रीज़ को किक करना चाहिए।

वैकल्पिक रूप से आप अपने शुरुआती विधि में HTTP विकल्प क्रिया का जवाब दे सकते हैं।

    protected void Application_BeginRequest(object sender,EventArgs e)
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

        if(HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            //These headers are handling the "pre-flight" OPTIONS call sent by the browser
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000" );
            HttpContext.Current.Response.End();
        }

    }

4
मैंने दोनों विधि की कोशिश की, लेकिन मेरे लिए केवल शुरुआती तरीका काम करता है। धन्यवाद @ शहा
बसंत बी। पाण्डेय

मेरे लिए, इसे web.config में उसी तरह जोड़ना जैसे ओपी एकमात्र तरीका था। Global.asax / BeginRequest काम नहीं किया।
twDuke

5
2 दिनों के शोध के बाद, वैकल्पिक समाधान का उपयोग करना Application_BeginRequestमेरे लिए समस्या को ठीक करने का एकमात्र तरीका था। मैंने अन्य तरीकों का उपयोग करने की कोशिश की customHeaders( stackoverflow.com/a/19091291/827168 ), OPTIONSVerbHandlerहैंडलर को हटाने, WebDAVमॉड्यूल और हैंडलर को हटाने ( stackoverflow.com/a/20705500/827168 ) लेकिन मेरे लिए कोई काम नहीं किया। उम्मीद है कि इससे दूसरों को मदद मिलेगी। और आपके जवाब के लिए धन्यवाद @ मन्धक!
अनार

20
लानत ASP.NET और IIS। कॉर्स जैसी सरल अवधारणा को कॉन्फ़िगर करना इतना कठिन क्यों होना चाहिए? यह वास्तव में सरल है। बस W3C के विनिर्देश पढ़ें। आप इसे 10 मिनट में सीख सकते हैं, और फिर आपको ASP.NET और IIS में इसे कॉन्फ़िगर करने का तरीका जानने के लिए 10 दिनों की आवश्यकता है।
सईद नेमाटी

3
@ मैंढक, आपने मेरी जान बचाई। केवल एक चीज जो मैंने जोड़ी थी वह हमेशा HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");साझा प्रमाणीकरण कुकी के कारण थी ।
नयनदास

26

मैं टिप्पणी पोस्ट नहीं कर सकता, इसलिए मुझे इसे एक अलग उत्तर में रखना होगा, लेकिन यह शाह द्वारा स्वीकृत उत्तर से संबंधित है।

मैंने शुरुआत में IIS में OPTIONSVerbHandler को फिर से कॉन्फ़िगर करके शाह के जवाब (धन्यवाद!) का पालन किया, लेकिन जब मैंने अपने आवेदन को फिर से तैयार किया तो मेरी सेटिंग्स बहाल हो गईं।

मैंने इसके बजाय अपने Web.config में OPTIONSVerbHandler को हटा दिया।

<handlers>
    <remove name="OPTIONSVerbHandler"/>
</handlers>

16
जो लोग web.config के साथ हर हफ्ते नहीं आते हैं उनके लिए यह "<system.webServer>" के अंदर जाता है
SemanticZen

20

मुझे http://help.infragistics.com/Help/NetAdvantage/jQuery/2013.1/CLR4.0/html/igOlapXmlaDataSource_Configuring_IIS_Cross_Domain_OLAP_Data.html पर मिली जानकारी मिली WCF के लिए HTTP विकल्प स्थापित करने में बहुत मददगार ।

मैंने अपने web.config में निम्नलिखित को जोड़ा और फिर OPTISVerbHandler को IIS 7 'हैंडर मैपिंग' सूची में शीर्ष पर ले गया। मैंने OPTIONSVerbHander को हैंडलर मैपिंग सेक्शन में डबल क्लिकर द्वारा फिर 'रिक्वेस्ट प्रतिबंध' पर और फिर एक्सेस टैब पर क्लिक करके एक्सेस एक्सेस दिया।

दुर्भाग्य से मुझे जल्दी से पता चला कि IE अपने XDomainRequest ऑब्जेक्ट में हेडर जोड़ने का समर्थन नहीं करता है (सामग्री-प्रकार को टेक्स्ट / xml पर सेट करके और SOAPAction हेडर को जोड़ने के लिए)।

बस इसे साझा करना चाहता था क्योंकि मैंने एक दिन के बेहतर हिस्से को देखा कि इसे कैसे संभालना है।

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

शाह का IIS isapiHandler कॉन्फ़िगरेशन काम नहीं करता था, हालांकि मैंने प्रोग्रामिंग तरीके की कोशिश नहीं की। हालाँकि मुझे web.config में उपरोक्त WCF कॉन्फ़िगरेशन भी मिला। Chrome अभी भी विकल्प भेजता है और पहली बार 405 प्राप्त करता है, लेकिन फिर यह एक और अनुरोध पोस्ट करता है, जो तब सही है।
मार्शल

ऐसा लगता है कि Chrome का वर्तमान संस्करण कोई http http स्थिति वाले उत्तर पर प्राप्त खाता शीर्षकों पर अधिक ध्यान नहीं देता है। इसलिए यह इस मामले में आगे नहीं बढ़ेगा और क्रॉस-डोमेन अनुरोध करेगा। यह एक बेहतर व्यवहार imho है।
Frédéric

1
इस प्रतिक्रिया के लिए धन्यवाद। यदि आपने ऊपर की प्रतिक्रिया को स्किम्ड कर दिया है तो ऊपर उल्लिखित विकल्प के रूप में OPTIONVerbHander रीड एक्सेस देना न भूलें।
जॉन मेयर

किसी स्रोत को निर्दिष्ट करना अधिक सुरक्षित है। देखिए: <add name="Access-Control-Allow-Origin" value="http://my.origin.host" />
गेब्रियल सिमास

9

405 प्रतिक्रिया एक "विधि की अनुमति नहीं है" प्रतिक्रिया है। ऐसा लगता है कि आपके सर्वर ठीक से कॉन्फ़िगर नहीं किया गया है ताकि कोर प्रीफ्लाइट अनुरोधों को संभाल सकें। आपको दो काम करने होंगे:

1) HTTP विकल्प अनुरोधों का जवाब देने के लिए IIS7 सक्षम करें। आपको 405 मिल रहे हैं क्योंकि IIS7 विकल्प अनुरोध को अस्वीकार कर रहा है। मुझे नहीं पता कि यह कैसे करना है क्योंकि मैं IIS7 से परिचित नहीं हूं, लेकिन स्टैक ओवरफ्लो पर संभवतः अन्य लोग हैं जो करते हैं।

2) कोर्स प्रीफ़्लाइट अनुरोधों का जवाब देने के लिए अपने एप्लिकेशन को कॉन्फ़िगर करें। आप अनुभाग Access-Control-Allow-Originमें रेखा के नीचे निम्नलिखित दो पंक्तियों को जोड़कर ऐसा कर सकते हैं <customHeaders>:

<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />

आपको उस Access-Control-Allow-Headersअनुभाग के आधार पर अन्य मानों को जोड़ना पड़ सकता है जो आपके अनुरोध के आधार पर कह रहे हैं। क्या आपके पास अनुरोध करने के लिए नमूना कोड है?

आप यहां CORS और CORS प्रीफ़्लाइट के बारे में अधिक जान सकते हैं: http://www.html5rocks.com/en/tutorials/cors/


9

डेविड जी के उत्तर से विस्तृत जो वास्तव में एक बुनियादी समाधान के लिए आवश्यक है:

  • सबसे पहले .Net हैंडलर को निष्पादित करने के लिए OPTIONSVerbHandler को कॉन्फ़िगर करें।

    1. IIS कंसोल में, "हैंडलर मैपिंग" (या तो सर्वर स्तर या साइट स्तर पर चयन करें; सावधान रहें कि साइट स्तर पर यह आपकी साइट के लिए सभी हैंडलर को फिर से परिभाषित करेगा और उसके बाद सर्वर स्तर पर किए गए किसी भी परिवर्तन को अनदेखा करेगा; और निश्चित रूप से सर्वर स्तर पर; यह अन्य साइटों को तोड़ सकता है यदि उन्हें विकल्प क्रिया के अपने स्वयं के संचालन की आवश्यकता होती है)।
    2. क्रिया फलक में, "ऑर्डर की गई सूची देखें ..." OPTIONSVerbHandler चुनें, और इसे ऊपर ले जाएं (बहुत सारे क्लिक ...)।

    आप इसे web.config में सभी हैंडलर को फिर से परिभाषित करके भी कर सकते हैं <system.webServer><handlers>( <clear>फिर <add ...>उन्हें वापस करें, यह आपके लिए IIS कंसोल है) (वैसे, इस हैंडलर पर "पढ़ने" की अनुमति के लिए पूछने की कोई आवश्यकता नहीं है।)

  • दूसरा, अपने cors जरूरतों के लिए कस्टम http हेडर कॉन्फ़िगर करें, जैसे:

    <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="POST,GET,OPTIONS"/>
        </customHeaders>
      </httpProtocol>
    </system.webServer>
    

    आप इसे IIS कंसोल में भी कर सकते हैं।

यह एक बुनियादी समाधान है क्योंकि यह अनुरोध पर भी हेडर भेजेगा जिसके लिए इसकी आवश्यकता नहीं है। लेकिन WCF के साथ, यह सबसे सरल एक जैसा दिखता है।

MVC या webapi के साथ, हम इसके बजाय कोड द्वारा विकल्प क्रिया और cors हेडर को संभाल सकते हैं (या तो "मैन्युअल रूप से" या वेबपी के नवीनतम संस्करण में उपलब्ध समर्थन के साथ)।


इसने मेरे लिए काम किया। मुझे पसंद नहीं है कि हर हैंडलर Web.config में पुनर्परिभाषित हो, लेकिन अफसोस कि ऐसा लगता है कि मुझे हमारी WCF सेवाओं को सक्षम बनाने के लिए क्या करने की आवश्यकता है। +1
मन्नी

3

ASP.net Web API 2 के साथ nuget के माध्यम से Microsoft ASP.NET क्रॉस ओरिजिन सपोर्ट स्थापित करें।

http://enable-cors.org/server_aspnet.html

public static void Register(HttpConfiguration config)
{
 var enableCorsAttribute = new EnableCorsAttribute("http://mydomain.com",
                                                   "Origin, Content-Type, Accept",
                                                   "GET, PUT, POST, DELETE, OPTIONS");
        config.EnableCors(enableCorsAttribute);
}

क्या आप जानते हैं कि अगर वहाँ programmaticallyपहले "ORIGIN" पैरामीटर सेट करने के लिए वैसे भी है EnableCorsAttribute? मान लें कि रजिस्टर में नहीं है, लेकिन इसमें आने वाले प्रत्येक व्यक्ति के HTTP अनुरोध के लिए, यह जिस मूल से आ रहा है, उसका पता लगाएं, यह सुनिश्चित करें कि यह ठीक है (अनुमोदित सूची की कुछ सूची के खिलाफ जांच करें) फिर से एक प्रतिक्रिया दें Access-Allow-Control-Origin="thatdomain.com"? @ और
मार्क पीज़ाक - त्रिलोन

3

मेरे लिए समाधान जोड़ना था:

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

मेरे वेब के लिए .config


2

अलसलाम एलेकुम।

पहला तरीका इस लिंक में दिए गए निर्देशों का पालन करना है:

http://help.infragistics.com/Help/NetAdvantage/jQuery/2013.1/CLR4.0/html/igOlapXmlaDataSource_Configuring_IIS_for_Cross_Domain_OLAP_Data.html

जो इन कॉन्फ़िगरेशन से मेल खाती है:

<handlers>
  <clear />
  <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" type="" modules="ProtocolSupportModule" scriptProcessor="" resourceType="Unspecified" requireAccess="Read" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />
  <add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="4194304" />
  <add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="4194304" />
  <add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" modules="ManagedPipelineHandler" scriptProcessor=""
  resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness64"
  responseBufferLimit="4194304" />
  <add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness32"
  responseBufferLimit="4194304" />
  <add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" modules="ManagedPipelineHandler"
  scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness64"
  responseBufferLimit="4194304" />
  <add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness32"
  responseBufferLimit="4194304" />
  <add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" modules="ManagedPipelineHandler"
  scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness64"
  responseBufferLimit="4194304" />
  <add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness32"
  responseBufferLimit="4194304" />
  <add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" modules="ManagedPipelineHandler" scriptProcessor=""
  resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="ISAPI-dll" path="*.dll" verb="*" type="" modules="IsapiModule" scriptProcessor="" resourceType="File" requireAccess="Execute" allowPathInfo="true" preCondition="" responseBufferLimit="4194304" />
  <add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"
  allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"
  allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"
  allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"
  allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness64"
  responseBufferLimit="0" />
  <add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0"
  responseBufferLimit="4194304" />
  <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0"
  responseBufferLimit="4194304" />
  <add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" modules="ManagedPipelineHandler"
  scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
  modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
  modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0"
  responseBufferLimit="4194304" />
  <add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0"
  responseBufferLimit="4194304" />
  <add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0"
  responseBufferLimit="4194304" />
  <add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0"
  responseBufferLimit="4194304" />
  <add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0"
  responseBufferLimit="4194304" />
  <add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" modules="ManagedPipelineHandler"
  scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" modules="ManagedPipelineHandler"
  scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="4194304" />
  <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"
  allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"
  allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"
  allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="classicMode,runtimeVersionv4.0,bitness32"
  responseBufferLimit="0" />
  <add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="TRACEVerbHandler" path="*" verb="TRACE" type="" modules="ProtocolSupportModule" scriptProcessor="" resourceType="Unspecified" requireAccess="None" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" type="" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false"
  preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
  <add name="StaticFile" path="*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" requireAccess="Read" allowPathInfo="false" preCondition="" responseBufferLimit="4194304"
  />
</handlers>

दूसरा तरीका यह है कि अपने शुरुआती विधि में HTTP ऑप्शंस वर्ब का जवाब दें।

  protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Request-Method", "GET ,POST, PUT, DELETE");

        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin,Content-Type, Accept");
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "86400"); // 24 hours
        HttpContext.Current.Response.End();
    }
}

2

इस समस्या को हल करने के लिए अंतराल की पहचान करने और एक आउट-ऑफ-बैंड कॉर्स मॉड्यूल को शिप करने में Microsoft साल लग गए।

  1. Microsoft से मॉड्यूल स्थापित करें
  2. इसे स्निपेट्स के साथ कॉन्फ़िगर करें

नीचे के अनुसार

<configuration>
    <system.webServer>
        <cors enabled="true" failUnlistedOrigins="true">            
            <add origin="http://*" allowed="true" />
        </cors>
    </system.webServer>
</configuration>

सामान्य तौर पर, यह आपके कस्टम हेडर की तुलना में बहुत आसान है और प्रीफ़्लाइट अनुरोधों के बेहतर संचालन की पेशकश भी करता है।

यदि आपको IIS एक्सप्रेस के लिए समान चाहिए, तो मेरे द्वारा लिखी गई कुछ PowerShell लिपियों का उपयोग करें ।


0

इन उत्तरों में एक बात जिसका उल्लेख नहीं किया गया है, वह यह है कि यदि आप IIS का उपयोग कर रहे हैं और उनके अपने अलग वेब के साथ उप अनुप्रयोग हैं।

<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="POST,GET,OPTIONS"/>
  </customHeaders>
</httpProtocol>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.