ASP.NET Core में CORS को कैसे सक्षम करें


189

मैं अपने ASP.NET कोर वेब एपीआई पर साझा मूल संसाधनों को साझा करने में सक्षम करने की कोशिश कर रहा हूं, लेकिन मैं फंस गया हूं।

EnableCorsविशेषता को स्वीकार करता है policyNameप्रकार के stringपैरामीटर के रूप में:

// Summary:
//     Creates a new instance of the Microsoft.AspNetCore.Cors.Core.EnableCorsAttribute.
//
// Parameters:
//   policyName:
//     The name of the policy to be applied.
public EnableCorsAttribute(string policyName);

इसका क्या policyNameमतलब है और मैं ASP.NET कोर वेब एपीआई पर CORS को कैसे कॉन्फ़िगर कर सकता हूं ?


जवाबों:


325

आपको ConfigureServicesविधि में एप्लिकेशन स्टार्टअप पर एक CORS नीति को कॉन्फ़िगर करना होगा :

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader();
    }));

    // ...
}

CorsPolicyBuilderमें builderआप अपनी आवश्यकताओं के नीति कॉन्फ़िगर करने के लिए अनुमति देता है। अब आप इस नाम का उपयोग नियंत्रकों और कार्यों के लिए नीति लागू करने के लिए कर सकते हैं:

[EnableCors("MyPolicy")]

या इसे हर अनुरोध पर लागू करें:

public void Configure(IApplicationBuilder app)
{
    app.UseCors("MyPolicy");

    // ...

    // This should always be called last to ensure that
    // middleware is registered in the correct order.
    app.UseMvc();
}

12
मैंने पाया कि app.UseCors ("MyPolicy") ने मेरे एपीआई एंडपॉइंट्स के लिए काम नहीं किया। मुझे प्रश्न में नियंत्रक समापन बिंदुओं पर स्पष्ट रूप से [EnableCors ("MyPolicy")] की आवश्यकता थी।
रॉन्बप्रिस्टली

9
से सरकारी डॉक्स : "CORS सक्षम करने के लिए के लिए अपने पूरे अनुप्रयोग का उपयोग जोड़ने के लिए आपके अनुरोध पाइप लाइन के लिए CORS मिडलवेयर UseCorsविस्तार विधि ध्यान दें कि CORS मिडलवेयर (पूर्व अपने अनुप्रयोग में किसी भी परिभाषित अंतिमबिंदुओं पूर्व में होना चाहिए कि आप पार मूल अनुरोध का समर्थन करना चाहते हैं। किसी भी कॉल से पहले UseMvc)। "
एलेक्स

2
मैंने app.UseCors () app.AddMvc () के बाद जोड़ा और यह काम नहीं किया। क्योंकि उपयोग के तरीकों का क्रम प्रभावित करता है कि मिडलवेयर कैसे काम करता है!
ओबे अब्द-अल्गदर

1
क्या किसी भी मूल को अनुमति देने का कोई जोखिम है?
पर्सी

लापता Microsoft.AspNetCore.Cors नगेट पैकेज के कारण यह उत्तर मेरे लिए कारगर नहीं था।
Reven

108

.NET Core 1 और .Net Core 2 (आगे नीचे) पर लागू होता है

यदि उपयोग कर रहे हैं .Net-Core 1.1

दुर्भाग्य से डॉक्स इस विशिष्ट मामले में बहुत भ्रमित हैं। तो मैं इसे मृत-सरल बना दूँगा:

  • Microsoft.AspNetCore.Corsअपने प्रोजेक्ट में नगेट पैकेज जोड़ें
  • में ConfigureServicesविधि, जोड़नेservices.AddCors();
  • में Configureविधि, कॉल करने से पहले app.UseMvc()और app.UseStaticFiles(), जोड़ें:

    app.UseCors(builder => builder
        .AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials());

बस। हर ग्राहक की आपके ASP.NET कोर वेबसाइट / एपीआई तक पहुँच होती है।


यदि उपयोग कर रहे हैं .Net-Core 2.0

  • Microsoft.AspNetCore.Corsअपने प्रोजेक्ट में नगेट पैकेज जोड़ें
  • में ConfigureServicesविधि, पहले बुला services.AddMvc(), जोड़ें:

     services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder =>
                {
                    builder
                    .AllowAnyOrigin() 
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();
                });
        });
  • (महत्वपूर्ण) में Configureविधि, पहले बुला app.UseMvc()ऐड app.UseCors("AllowAll");

    AllowAllनीति का नाम जिसे हमें app.UserCors में उल्लेख करना होगा। यह कोई भी नाम हो सकता है।


2
सच, सोचा कि मैं उनमें से सिर्फ एक को सक्षम कर सकता हूं!
यूजीनके

7
धन्यवाद। मैं UseMvc के बाद अपने AddCors था और वह इसे ठीक से काम नहीं कर रहा था। तुम्हारा ही जवाब है कि यह उल्लेख है।
जेसी नवेमैन 19

1
यह काम नहीं करता मुझे नहीं लगता। क्रेडेंशियल्स की आपूर्ति करते समय, आप किसी भी मूल की अनुमति नहीं दे सकते। मैं अभी भी इस काम के लिए कोशिश कर रहा हूँ।
जेसन गोएमाट

7
यह महत्वपूर्ण टुकड़ा है: .UseCors()इससे पहले.UseMvc()
नेपल्स

3
UserMvc से पहले UseCors के बारे में नहीं जानने के साथ समय बर्बाद किया ... मदद के लिए धन्यवाद!
थॉमस

37

हेंक के जवाब के आधार पर मैं विशिष्ट डोमेन के साथ आने में सक्षम हूं, जिस विधि की मैं अनुमति देना चाहता हूं और वह शीर्षलेख भी जिसके लिए मैं कॉर्स को सक्षम करना चाहता हूं:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
         options.AddPolicy("AllowSpecific", p => p.WithOrigins("http://localhost:1233")
                                                   .WithMethods("GET")
                                                   .WithHeaders("name")));
    services.AddMvc();
}

उपयोग:

[EnableCors("AllowSpecific")]

यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
14

14
To critique or request clarification from an authorमुझे नहीं लगता कि यहां ऐसा मामला है और हेंक का जवाब पहले ही चिह्नित किया जा चुका है। यदि आप विशिष्ट डोमेन की अनुमति देना चाहते हैं तो मेरा जवाब एक ऐड-ऑन था।
ओलूवाफेमी

आपके कोड में कुछ गायब है, 'IServiceCollection' में 'ConfigureCors' की परिभाषा नहीं है। कृपया इसकी जाँच करें और पूर्ण उत्तर देने का प्रयास करें।
सामी-एल

@ सामी-एल कृपया मेरे अद्यतन उत्तर की जाँच करें। मुझे पता चला कि ConfigureCorsइसे बदल दिया गया था AddCors
ओल्व्वाफेमी

9

विशेष रूप से डॉटनेट कोर 2.2 में सिग्नलआर के साथ आपको बदलना होगा

.WithOrigins("http://localhost:3000") या

.SetIsOriginAllowed(isOriginAllowed: _ => true) //for all origins

बजाय .AllowAnyOrigin()साथ.AllowCredentials()

https://trailheadtechnology.com/breaking-change-in-aspnetcore-2-2-for-signalr-and-cors/

https://github.com/aspnet/AspNetCore/issues/4483


.NET कोर कंसोल ऐप में सिग्नलआर का उपयोग करना और यह मेरे परिदृश्य के लिए एकमात्र कार्यशील समाधान है।
asdf

7

यदि आप IIS पर होस्ट कर रहे हैं, तो एक संभावित कारण यह है कि आप ऐसा कर रहे हैं क्योंकि IIS OPTIONSक्रिया को रोक रहा है । मैंने लगभग एक घंटा इस वजह से बिताया:

एक गप्पी संकेत है कि आप अनुरोध के 404दौरान त्रुटि प्राप्त कर रहे OPTIONSहैं।

इसे ठीक करने के लिए, आपको IIS को स्पष्ट रूप से बताना होगा नहीं ब्लॉक करने के लिए OPTIONSअनुरोध।

अनुरोध फ़िल्टर करने के लिए जाओ:

IIS अनुरोध फ़िल्टरिंग

सुनिश्चित करें कि विकल्प की अनुमति है:

सुनिश्चित करें कि विकल्प सत्य है

या, बस web.configनिम्नलिखित सेटिंग के साथ बनाएं :

<system.webServer>
    <security>
        <requestFiltering>
            <verbs>
                <remove verb="OPTIONS" />
                <add verb="OPTIONS" allowed="true" />
            </verbs>
        </requestFiltering>
    </security>
</system.webServer>

7

आपको Startup.cs वर्ग में कॉन्फ़िगर करना होगा

services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        });

5

`

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("AllowAnyOrigin",
                builder => builder
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        });

        services.Configure<MvcOptions>(options => {
            options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAnyOrigin"));
        });            
    }

`


पहले से ही तैनात ब्राउज़र सुरक्षा को दरकिनार करने का अद्भुत तरीका। बस नहीं!
जेसीकेडेल

2
मुझे नहीं लगता कि इसे डाउन-वोट किया जाना चाहिए। यह एक "वैकल्पिक" तरीका है। आप या तो "UseCors ()" विधि का उपयोग कर सकते हैं या फिर एक वैश्विक MVC फ़िल्टर जोड़ सकते हैं जैसे नाथन ने यहां क्या किया।
जोश मॉच

यह मेरे लिए .net कोर 2.2 प्लस ऐप जोड़ने के लिए काम करता है। UseCors ("AllowAnyOrigin"); में "कॉन्फ़िगर" विधि
हैरी Sarshogh

"Microsoft.AspNetCore.Cors nuget पैकेज को अपनी परियोजना में जोड़ना महत्वपूर्ण है"। इसका उल्लेख करने के लिए धन्यवाद!
मेसन झांग

5

निम्न के साथ .Net Core 3.1 के साथ काम करना

1. सुनिश्चित करें कि आप App.UseRout () के बीच UseCors कोड रखते हैं; और app.UseAuthentication ();

        app.UseHttpsRedirection();

        app.UseRouting();
        app.UseCors("CorsApi");

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints => {
            endpoints.MapControllers();
        });

2. फिर इस कोड को कंफिगर सर्विसेज में रखें

services.AddCors(options =>
        {
            options.AddPolicy("CorsApi",
                builder => builder.WithOrigins("http://localhost:4200", "http://mywebsite.com")
            .AllowAnyHeader()
            .AllowAnyMethod());
        });

3. आधार नियंत्रक के ऊपर और मैंने इसे रखा

[EnableCors("CorsApi")]
[Route("api/[controller]")]
[ApiController]
public class BaseController : ControllerBase

अब मेरे सभी कंट्रोलर बेसकंट्रोलर से वारिस होंगे और उनके पास कोर सक्षम होगा


चीजें मेरे लिए काम कर रही थीं जब तक मैंplace the UseCors code between app.UseRouting(); and app.UseAuthentication();
0014

1

चरण 1: हमें अपनी परियोजना में Microsoft.AspNetCore.Cors पैकेज की आवश्यकता है। इंस्टाल करने के लिए टूल्स पर जाएं -> नुगेट पैकेज मैनेजर -> सॉल्यूशन के लिए नूगेट पैकेज प्रबंधित करें। Microsoft.AspNetCore.Cors के लिए खोजें और पैकेज स्थापित करें।

चरण 2: हमें कोर को कंटेनर में इंजेक्ट करने की आवश्यकता है ताकि इसे एप्लिकेशन द्वारा उपयोग किया जा सके। Startup.cs वर्ग में, आइए ConfigureServices विधि पर जाएं और CORS पंजीकृत करें।

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

तो, हमारे सर्वर ऐप में, कन्ट्रोलर्स पर जाएँ -> HomeController.cs और IndexCors डेकोरेटर को इंडेक्स विधि (या आपके विशिष्ट नियंत्रक और क्रिया) में जोड़ें:

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

अधिक विस्तार के लिए यहां क्लिक करें


0

ऊपर वर्णित सभी वर्कअराउंड काम कर सकते हैं या नहीं भी काम कर सकते हैं, ज्यादातर मामलों में यह काम नहीं करेगा। इसका समाधान मैंने यहां दिया है

वर्तमान में मैं कोणीय और वेब एपीआई (.net Core) पर काम कर रहा हूं और नीचे वर्णित CORS मुद्दे पर आया हूं

ऊपर दिया गया समाधान हमेशा काम करेगा। 'विकल्प' अनुरोध के साथ 'बेनामी प्रमाणीकरण' को सक्षम करना वास्तव में आवश्यक है। यहां बताए गए समाधान के साथ आपको ऊपर बताए गए सभी चरणों को करने की जरूरत नहीं है, जैसे कि आईआईएस सेटिंग्स।

वैसे भी किसी ने इस पोस्ट के साथ मेरे उपरोक्त पोस्ट को डुप्लिकेट के रूप में चिह्नित किया है, लेकिन मैं देख सकता हूं कि यह पोस्ट केवल ASP.net Core में CORS को सक्षम करने के लिए है, लेकिन मेरी पोस्ट ASP.net Core और Angular में CORS को सक्षम और कार्यान्वित करने से संबंधित है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.