कोर नीति और .NET कोर 3.1 के साथ परेशानी


11

मुझे यकीन नहीं है कि मैं क्या याद कर रहा हूं, लेकिन मेरी कोर नीति को .NET कोर 3.1 और कोणीय 8 क्लाइंट-साइड के साथ काम करना नहीं मिल सकता है।

Startup.cs:

        public void ConfigureServices(IServiceCollection services)
        {
            // ...

            // Add CORS policy
            services.AddCors(options =>
            {
                options.AddPolicy("foo",
                builder =>
                {
                    // Not a permanent solution, but just trying to isolate the problem
                    builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
                });
            });

            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            // Use the CORS policy
            app.UseCors("foo");

            app.UseRouting();

            app.UseAuthorization();

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

त्रुटि संदेश क्लाइंट-साइड:

Access to XMLHttpRequest at 'https://localhost:8082/api/auth/' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

अपडेट करें:

हालाँकि, मैं गलत तरीके से कॉर्स को कॉन्फ़िगर कर रहा था (और नीचे दिए गए स्वीकृत उत्तर ने वास्तव में उसी की मदद की थी) मुद्दे की जड़ असंबंधित थी। अतिरिक्त संदर्भ के लिए, एप्लिकेशन पूरी तरह से ठीक काम कर रहा था जब सीएलआई का उपयोग करके एपीआई और कोणीय ऐप चला रहा था - मैं केवल उन दोनों को एक वेब सर्वर पर तैनात करने के बाद यह समस्या आ रही थी।

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

मैं आमतौर पर यह उम्मीद करूंगा कि यह केवल 500 वापस कर देगा और मुझे 10 सेकंड के मामले में समस्या का एहसास होगा - हालांकि कॉर्स गलत कॉन्फ़िगरेशन का मतलब था कि 500 ​​वास्तव में कभी नहीं लौटाए गए क्योंकि कॉर्स मिडलवेयर पहले विफल हो गया। यह पूरी तरह से कम से कम कहने के लिए बहुत निराशाजनक था! । हालाँकि, मैं यह जोड़ना चाहता हूं कि अगर कोई ऐसा करेगा तो मैं खुद को इस स्थिति में पा लूंगा। कॉर्स कॉन्फ़िगरेशन को ठीक करने के बाद, मुझे एहसास हुआ कि वास्तविक मुद्दा पूरी तरह से कॉर्स से असंबंधित था।

टी एल; डॉ; - कभी-कभी "नॉन-कॉर्स" .NET सर्वर-साइड एरर को कॉर्स एरर्स के रूप में लौटाया जा सकता है, यदि कॉर्स पॉलिसी सही तरीके से सेट नहीं होती हैं

संदर्भ:

https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1#cors-with-named-policy-and-middleware

https://medium.com/swlh/cors-headers-with-dot-net-core-3-5c9dfc664785


1
app.UseCors("foo");पहले सेट करने की कोशिश करेंapp.UseHttpsRedirection();
StepUp

सिफारिश के लिए @StepUp धन्यवाद, लेकिन फिर भी कोई किस्मत नहीं
KMJungersen

क्या आपने अपनी समस्या हल कर ली है?
स्टेपअप

क्या किसी ने इस मुद्दे को हल किया है? कोई उत्तर क्यों स्वीकार नहीं किया जाता है?
वसीम अहमद नईम

हाँ, क्षमा करें, मैंने इसे हल करने के बाद इस मुद्दे पर वापस नहीं लिया। मैंने कुछ अतिरिक्त संदर्भ के साथ सवाल का अपडेट जोड़ा है। धन्यवाद!
KMJungersen 20

जवाबों:


20

पहले app.UseRouting();तोapp.UseCors("foo");

अपनी Configureपद्धति को निम्नलिखित की तरह बदलें :

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();



    app.UseRouting();  // first
    // Use the CORS policy
    app.UseCors("foo"); // second

    app.UseAuthorization();

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

यह मेरे लिए काम किया!


-क्या एक नगेट पैकेज आवश्यक है?
चना

cors के लिए नगेट पैकेज
चना

1
@chana - आप nuget पैकेज स्थापित करने की जरूरत नहीं
AbolfazlR

7
मैं DAYS के लिए इस मुद्दे पर अटक गया था! इंटरनेट से कुछ भी काम नहीं किया। ओपी के ConfigureServicesकोड के साथ आपके समाधान ने मेरी समस्या को हल कर दिया। आपका बहुत बहुत धन्यवाद!
तहरीम इकबाल

1
मुझे उम्र के लिए स्टम्प्ड किया गया था। बहुत धन्यवाद!
माइल जे

6

वेब एपीआई का उपयोग कर रहा है app.UseHttpsRedirection(); CORSयदि ग्राहक से अनुरोध न किया जाए तो यह समस्या का कारण बनता है https। इसलिए httpक्लाइंट के साथ इसका उपयोग करने के लिए हमें उस लाइन पर टिप्पणी या हटाने की आवश्यकता है।

यह समस्या नहीं है CORS, https इस समस्या का कारण बन रहा है, लेकिन फेंकी गई त्रुटि इसे CORS के साथ कह रही है।


थैंक्स मैन। इससे मेरी समस्या हल हो गई
रीगन गैलेंट

1
वह सही है! लाइन UseHttpsRedirection () UseCors () के बाद होना चाहिए
एरिक


0

जैसा कि आप लोकलहोस्ट का उपयोग कर रहे हैं http://localhost:4200, तो इसे अपने कॉन्फ़िगरेशन में सेट करने का प्रयास करें:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options => options.AddPolicy("ApiCorsPolicy", build =>
    {                
        build.WithOrigins("http://localhost:4200")
             .AllowAnyMethod()
             .AllowAnyHeader();
        }));
        // ... other code is omitted for the brevity
     }
}

और Configureविधि:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider provider)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseCors("ApiCorsPolicy");
    app.UseHttpsRedirection();
    app.UseAuthentication();
    app.UseMvc();
}

0

Cors सेवा को जोड़ने के .SetIsOriginAllowed((host) => true)बाद शामिल करना सुनिश्चित करें.WithOrigins("http://localhost:4200")

services.AddCors(options => {
            options.AddPolicy("mypolicy",builder => builder
            .WithOrigins("http://localhost:4200/")
            .SetIsOriginAllowed((host) => true)
            .AllowAnyMethod()
            .AllowAnyHeader());
  });

0

.NET कोर 3.1 के लिए

सबसे अच्छा तरीका app.settings फ़ाइल में मूल पथ को संग्रहीत करना है

"Origins": {
    "Server": "http://localhost:5001/",
    "Client": "http://localhost:4200/",
    "CorsOrigins": "http://localhost:4200,http://localhost:5001"
}

और ConfigureServicesविधि में विन्यास खंड से उत्पत्ति को परिभाषित करते हैं

services.AddCors(
            options => options.AddPolicy(
                PolicyNames.AllowOrigins,
                builder => builder
                    .WithOrigins(
                        Configuration["Origins:CorsOrigins"]
                            .Split(",", StringSplitOptions.RemoveEmptyEntries)
                            .Select(s => s.TrimEnd('/'))
                            .ToArray()
                    )
                    .AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials()
            )
        );

अंत में, बस Configureविधि में cors का उपयोग करें (कोई फर्क नहीं पड़ता आदेश का उपयोग करें!)

app.UseCors(PolicyNames.AllowOrigins);     //Enable CORS!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.