2015-09-01 9 views
13

से CORS हेडर में 'पहुंच-नियंत्रण-अनुमति दें-शीर्षकों' मैं दो वी.एस. परियोजनाओं हैं: एक उजागर MVC5 नियंत्रकों, अन्य एक कोणीय ग्राहक जा रहा है। मैं कोणीय क्लाइंट नियंत्रकों से पूछताछ करने में सक्षम होना चाहता हूँ। मैं कई धागे पढ़ सकते हैं और निम्नलिखित की कोशिश की:गुम टोकन 'पहुंच-नियंत्रण-अनुमति देते हैं-हेडर' CORS preflight चैनल

  • मैं सर्वर के वेब config में इस कहा:

    <system.webServer> 
        <httpProtocol> 
         <customHeaders> 
          <clear /> 
          <add name="Access-Control-Allow-Origin" value="*" /> 
         </customHeaders> 
        </httpProtocol> 
    <system.webServer> 
    
  • मैं बनाया है और नियंत्रक की कार्रवाई पर निम्न फ़िल्टर प्रयोग किया है:

    public class AllowCrossSiteJsonAttribute : ActionFilterAttribute 
    { 
        public override void OnActionExecuting(ActionExecutingContext filterContext) 
        { 
         filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
         base.OnActionExecuting(filterContext); 
        } 
    } 
    
  • कोणीय ग्राहक में, मैंने निम्नलिखित इंटरसेप्टर बनाया:

    app.factory("CORSInterceptor", [ 
        function() 
        { 
         return { 
          request: function(config) 
          { 
           config.headers["Access-Control-Allow-Origin"] = "*"; 
           config.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS"; 
           config.headers["Access-Control-Allow-Headers"] = "Content-Type"; 
           config.headers["Access-Control-Request-Headers"] = "X-Requested-With, accept, content-type"; 
           return config; 
          } 
        }; 
    } 
    ]); 
    
    app.config(["$httpProvider", function ($httpProvider) { 
        $httpProvider.interceptors.push("CORSInterceptor"); 
    }]); 
    

Firebug के अनुसार, इस निम्नलिखित अनुरोध में परिणाम:

OPTIONS //Login/Connect HTTP/1.1 
Host: localhost:49815 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Origin: http://localhost:50739 
Access-Control-Request-Method: POST 
Access-Control-Request-Headers: access-control-allow-headers,access-control-allow-origin,content-type 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 

और निम्नलिखित प्रतिक्रिया:

HTTP/1.1 200 OK 
Allow: OPTIONS, TRACE, GET, HEAD, POST 
Server: Microsoft-IIS/10.0 
Public: OPTIONS, TRACE, GET, HEAD, POST 
X-SourceFiles: =?UTF-8?B?RDpcVEZTXElVV2ViXEdhcE5ldFNlcnZlclxBU1BTZXJ2aWNlc1xMb2dpblxDb25uZWN0?= 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, OPTIONS 
Access-Control-Allow-Headers: * 
Access-Control-Request-Headers: X-Requested-With, accept, content-type 
Date: Tue, 01 Sep 2015 13:05:23 GMT 
Content-Length: 0 

और फिर भी, फ़ायरफ़ॉक्स ब्लॉक निम्न संदेश के साथ अनुरोध :

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:49815//Login/Connect. (Reason: missing token 'access-control-allow-headers' in CORS header 'Access-Control-Allow-Headers' from CORS preflight channel). 
+1

की [Cors पहुंच-नियंत्रण-अनुमति दें-हेडर वाइल्डकार्ड अनदेखा किया जा रहा?] (Http संभव डुप्लिकेट://stackoverflow.com/questions/13146892/cors-access-control-allow-headers-wildcard-being-ignored) – sideshowbarker

उत्तर

20

कई बार, धागे कि मैंने पढ़ा कई अनावश्यक कॉन्फ़िगरेशन चरण है, जो भ्रम की स्थिति पैदा की सुझाव दे रहे थे। यह वास्तव में बहुत सरल है ...

एक कोणीय ग्राहक से, एक क्रॉस साइट अनुरोध भेजने के सरल प्रयोजन के लिए, एक एएसपी नियंत्रक करने के लिए:

  • नहीं कोणीय इंटरसेप्टर आवश्यक हैं।
  • सर्वर पक्ष पर कोई कस्टम फ़िल्टर आवश्यक नहीं है।
  • केवल अनिवार्य संशोधन सर्वर के web.config में जोड़ने के लिए है

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

मैंने कोशिश की लेकिन यह अभी भी काम नहीं कर रहा है – Sushil

5

समस्या यह है कि Access-Control-Allow-Headers शीर्षलेख वाइल्डकार्ड की अनुमति नहीं देता है। (केवल Access-Control- हेडर जो वाइल्डकार्ड Access-Control-Allow-Origin है)।

तो इसके बजाय मूल्य को उन शीर्षकों के नामों को स्पष्ट रूप से सूचीबद्ध करने की आवश्यकता है जिन्हें आप अनुमति देना चाहते हैं। कुछ वास्तविक शीर्षलेख नामों के साथ * को बदलें और फिर मुझे लगता है कि आप पाएंगे कि यह काम करता है।

संबंधित मुद्दे