2015-10-21 7 views
5

मैं एक AngularJS पृष्ठ से एक ASP.NET वेब-एपीआई वेब सेवा से कनेक्ट करने की कोशिश कर रहा हूँ और मैं निम्नलिखितसाख झंडा 'सही' है, लेकिन 'पहुंच-नियंत्रण-अनुमति दें-क्रेडेंशियल

साख हो रही है ध्वज 'सत्य' है, लेकिन 'एक्सेस-कंट्रोल-अनुमति-प्रमाण-पत्र' शीर्षलेख '' है। प्रमाण-पत्रों की अनुमति देने के लिए यह 'सत्य' होना चाहिए। उत्पत्ति 'http://localhost:221' इसलिए पहुंच की अनुमति नहीं है।

 var cors = new EnableCorsAttribute("http://localhost:221", "*","GET,PUT,POST,DELETE"); 
     config.EnableCors(cors); 

का उपयोग करते हुए इस AngularJS

 $http({ 
     method: 'GET', 
     url: 'http://localhost:1980/api/investors/62632', 
     headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 
     withCredentials: true 
     // withCredentials: true, 
    }).then(function onUserComplete(response) { 
     // this callback will be called asynchronously 
     // when the response is available 
    }, function onError(response) { 
     // called asynchronously if an error occurs 
     // or server returns response with an error status. 

कई लेख को पढ़ने के बाद मैं web.config

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="http://localhost:221" /> 
    </customHeaders> 
</httpProtocol> 

को यह जोड़ सकते हैं और मैं यह त्रुटि संदेश

'Access- मिल नियंत्रण-अनुमति-उत्पत्ति 'शीर्षलेख में कई मान स्थानीयहोस्ट होते हैं: 221, लोकलहोस्ट: 221, लेकिन केवल एक की अनुमति है। उत्पत्ति लोकहोस्ट: 221 इसलिए पहुंच की अनुमति नहीं है।

जो वास्तव में कोई समझ नहीं आता है क्योंकि मैंने इसे एक बार जोड़ा है और इसे नहीं मिला है लेकिन मैं इसे web.config में जोड़ता हूं और यह कहता हूं कि इसे कई बार जोड़ा गया है। मैंने कई लेख पढ़े हैं और सही जवाब नहीं मिल रहे हैं। मैं Google क्रोम का उपयोग कर रहा हूँ। मदद के लिए बहुत आभारी होंगे क्योंकि मैं अभी अपने बालों को खींच रहा हूं।

+0

चेक इस उत्तर: http://stackoverflow.com/questions/21664988/no-http-resource-error-when-doing- put-post-cors-issue-angularjs-web-api-2/21667606 # 21667606 मुझे web.config से सेटिंग्स को निकालना पड़ा और उन्हें कोड में पूरी तरह से छोड़ना पड़ा। एक आईआईएस कॉन्फ़िगरेशन समस्या हो सकती है – link64

उत्तर

0

विधि यहाँ preflight अनुरोधों के लिए उल्लिखित का प्रयास करें:

enabling cross-origin resource sharing on IIS7

और CORS की आसान डिबगिंग के लिए Chrome एक्सटेंशन डाकिया या फ़िडलर का उपयोग करें। मैं यह शर्त लगाने के लिए तैयार हूं कि आप दो बार हेडर जोड़ रहे हैं, लेकिन आपके पूरे कोड के बिना, डीबग करना मुश्किल है। (बिल्ली, कोड के साथ भी डीओआरएस डीबग करना मुश्किल है)।

मेरे लिए, ऐसा प्रतीत होता है कि आपके पास web.config सेटिंग के साथ-साथ वैश्विक EnableCors() विशेषता दोनों नहीं होनी चाहिए - इससे युगल का कारण बनता है।

आप कहीं भी सर्वर पक्ष Access-Control-Allow-Credentials जोड़ने के लिए प्रतीत नहीं होते हैं, लेकिन इसे AllowCors विशेषता द्वारा जोड़ा जा सकता है, मुझे यकीन नहीं है। (मैं खुद ओविन में सीओआरएस को संभालने के लिए आंशिक हूं)

9

शीर्षलेख कोड द्वारा दो बार और दूसरा web.config द्वारा जोड़ा जाता है। सीओआरएस समर्थन का उपयोग सीओआरएस उद्देश्यों के लिए शीर्षकों को जोड़ने की अनुमति देने के लिए किया जाता है। कॉन्फ़िगरेशन कस्टम हेडर भी किसी भी अनुरोध पर प्रतिक्रिया शीर्षलेख जोड़ते हैं, ताकि आप कॉन्फ़िगरेशन सेटिंग को हटाना चाहें।

var cors = new EnableCorsAttribute.. 

<customHeaders> 
    <add name="Access-Control-Allow-Origin" value="http://localhost:221" /> 
</customHeaders> 

उन क्षेत्रों के दोनों के बाद से दो बार एक ही मूल जोड़ रहे हैं, तो आप शीर्षक पर एक से अधिक मान मिलता है।

पैरामीटर withCredentials: true पैरामीटर के साथ AJAX कॉल करते समय, प्रतिक्रिया शीर्षलेख में Access-Control-Allow-Credentials = true होना चाहिए। आपको CORS विशेषताओं के लिए SupportsCredentials = true का उपयोग करके कोड के माध्यम से जोड़ने की आवश्यकता है।नहीं तो आप त्रुटि मिल जाएगा "साख झंडा 'सही' है, लेकिन 'पहुंच-नियंत्रण-अनुमति दें-क्रेडेंशियल है' '"

अधिक जानकारी के लिए withCredential पैरामीटर और इस पर प्रतिक्रिया हेडर नज़र पर, लेख:

http://www.ozkary.com/2015/12/api-oauth-token-access-control-allow-credentials.html

आशा है कि यह मदद करता है।

+4

SupportsCredentials = true attibute के बारे में अच्छी टिप्पणी। किसके लिए, WebApiConfig.cs का उपयोग करता है: config.EnableCors (नया EnableCorsAttribute ("\ *", "\ *", "\ *") {SupportsCredentials = true}); –

+0

@RomanO धन्यवाद, यह एकमात्र समाधान है जो वास्तव में मेरे लिए – developer

+0

@RomanO के लिए काम करता है, आपको प्रश्न के उत्तर के रूप में अपना उत्तर प्रस्तावित करना चाहिए। यह एकमात्र समाधान है जो खोज के घंटों के बाद मेरे लिए काम करता है। – Kesty

1

मैं एक कोणीय 2 ऐप से नेट नेट पर वेबपीआई हिट करने का प्रयास करते समय इस प्रश्न में आया। मुझे AllowCredentials() को निम्न की तरह दिखने के लिए Startup.cs में मेरी कॉन्फ़िगर विधि में कॉर्स कॉन्फ़िगरेशन में जोड़ना पड़ा।

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    ... 
    app.UseCors(builder => 
     builder 
     .AllowCredentials() 
     .WithOrigins("http://localhost:3000")); 
    ... 
} 
7

किसके लिए है, जो WebApiConfig.cs उपयोग करता है:

config.EnableCors(new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true }); 
संबंधित मुद्दे