কিভাবে এএসপি.নেট কোরগুলিতে সিআরএস সক্ষম করবেন


189

আমি আমার এএসপি.নেট কোর ওয়েব এপিআইতে ক্রস অরিজিন রিসোর্সগুলি সক্ষম করার চেষ্টা করছি, তবে আমি আটকে আছি।

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মানে কী এবং কীভাবে আমি একটি এএসপি.নেট কোর ওয়েব এপিআই তে CORS কনফিগার করতে পারি ?


1
এখানে নিবন্ধটি ডকস.মাইক্রোসফট
ইলাইন

উত্তর:


325

ConfigureServicesপদ্ধতিটিতে অ্যাপ্লিকেশন প্রারম্ভকালে আপনাকে একটি সিওআরএস নীতি কনফিগার করতে হবে :

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
আমি এই অ্যাপটি পেয়েছি seউইসকর্স ("মাইপলিসি") আমার এপিআই এর শেষ পয়েন্টগুলির জন্য কাজ করে না। আমার প্রশ্নের স্পষ্টভাবে নিয়ন্ত্রণকারী শেষ পয়েন্টগুলিতে স্পষ্টতই [সক্ষমকরণ ("মাইপোলিসি")] প্রয়োজন।
robbpriestley

9
থেকে সরকারী দস্তাবেজ : "CORS সক্রিয় করার জন্য জন্য আপনার সমগ্র অ্যাপ্লিকেশন ব্যবহার করে যোগ আপনার অনুরোধ পাইপলাইন CORS মিডলওয়্যার UseCorsএক্সটেনশন পদ্ধতি লক্ষ্য করুন CORS মিডলওয়্যার (উদা আপনার অ্যাপে কোনো সংজ্ঞায়িত এন্ড পয়েন্ট আগে বসে হবে যে আপনি ক্রশ-অরিজিন অনুরোধ সহযোগিতা করতে চাই। UseMvc" কোনও কল করার আগে )।"
অ্যালেক্স ক্লাউস

2
আমি app.AsedMvc ​​() এর পরে app.UseCors () যুক্ত করেছি এবং এটি কার্যকর হয়নি। কারণ ব্যবহারের ক্রমগুলি মিডলওয়্যারগুলি কীভাবে কাজ করে তা প্রভাবিত করে!
ওবায়ে আবদ-আলগাদের

1
কোন উত্স অনুমতি দেওয়ার কোন ঝুঁকি আছে?
পার্সি 13

মাইক্রোসফ্ট অনুপস্থিত থাকার কারণে এই উত্তরটি আমার পক্ষে কার্যকর হয়নি spএফনেটকোর.কার্স নুগেট প্যাকেজ।
রিভেন

108

.NET কোর 1 এবং। নেট কোর 2 (আরও নীচে) এ প্রযোজ্য

যদি ব্যবহার করা হয় .Net-Core 1.1

দুর্ভাগ্যক্রমে ডক্সগুলি এই নির্দিষ্ট ক্ষেত্রে খুব বিভ্রান্ত করছে। সুতরাং আমি এটিকে মৃত-সরল করে দেব:

  • Microsoft.AspNetCore.Corsআপনার প্রকল্পে নুগেট প্যাকেজ যুক্ত করুন
  • ইন ConfigureServicesপদ্ধতি, যোগservices.AddCors();
  • ইন Configureপদ্ধতি, কল করার আগে app.UseMvc()এবং app.UseStaticFiles(), যোগ করুন:

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

এটাই. প্রত্যেক ক্লায়েন্টের আপনার এএসপি.নেট কোর ওয়েবসাইট / এপিআইতে অ্যাক্সেস রয়েছে।


যদি ব্যবহার করা হয় .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অ্যাপ্লিকেশানটিতে আমাদের যে নীতি নামটি উল্লেখ করা দরকার তা হ'ল ব্যবহারকারীদের ors এটি কোনও নাম হতে পারে।


2
সত্য, আমি তাদের মধ্যে একটি সক্ষম করতে পারি ভেবেছি!
ইউজিনেক

7
ধন্যবাদ। ইউজএমভিসি এর পরে আমার অ্যাডকর্স ছিল এবং এটি এটি সঠিকভাবে কাজ না করার কারণ ছিল। আপনার একমাত্র উত্তর যা এর উল্লেখ করে।
জেসি নিউম্যান 19

1
এটি কাজ করে না আমি ভাবি না। শংসাপত্র সরবরাহ করার সময়, আপনি কোনও উত্সের অনুমতি দিতে পারবেন না। আমি এখনও এটি কাজ পেতে চেষ্টা করছি।
জেসন গোয়েমাট

7
এটি মূল টুকরো: এর .UseCors()আগে.UseMvc()
নেপস

3
ইউজারএমভিসি এর আগে ইউজারকর্স সম্পর্কে না জেনে সময় নষ্ট করা ... সহায়তার জন্য ধন্যবাদ!
থমাস

37

হেনকের উত্তরের ভিত্তিতে আমি নির্দিষ্ট ডোমেনটি, যে পদ্ধতিটি আমি মঞ্জুর করতে চাই এবং যে শিরোনামের জন্য আমি CORS সক্ষম করতে চাই তার সাথেও আসতে সক্ষম হয়েছি:

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")]

এটি প্রশ্নের উত্তর সরবরাহ করে না। কোনও লেখকের কাছ থেকে সমালোচনা বা স্পষ্টতার জন্য অনুরোধ জানাতে, তাদের পোস্টের নীচে একটি মন্তব্য দিন।
zrvan

14
To critique or request clarification from an authorআমি মনে করি না এটি এখানেই ঘটেছে এবং হেনকের উত্তর ইতিমধ্যে চিহ্নিত করা হয়েছে। আপনি যদি নির্দিষ্ট ডোমেনগুলির অনুমতি দিতে চান তবে আমার উত্তরটি একটি অ্যাড-অন ছিল।
ওলুওফেমি

আপনার কোডটিতে কিছু অনুপস্থিত, 'আইএসভারসোলেকশন' তে 'কনফিগারকর্স' এর সংজ্ঞা নেই। দয়া করে এটি পরীক্ষা করে দেখুন এবং একটি সম্পূর্ণ উত্তর দেওয়ার চেষ্টা করুন।
সামি-এল

@ সামি-এল দয়া করে আমার আপডেট হওয়া উত্তরটি পরীক্ষা করুন। আমি জানতে পেরেছিলাম যে এতে ConfigureCorsপরিবর্তন করা হয়েছিল AddCors
ওলুওফেমি

9

বিশেষত সিগন্যালআরের সাথে ডটনেট কোর ২.২ এ আপনাকে অবশ্যই পরিবর্তন করতে হবে

.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 কোর কনসোল অ্যাপে সিগন্যালআর ব্যবহার করা এবং এটি আমার দৃশ্যের একমাত্র কার্যক্ষম সমাধান solution
06

7

আপনি যদি আইআইএস-এ হোস্টিং করছেন, এর একটি সম্ভাব্য কারণ হ'ল এটি হ'ল কারণ আইআইএস ক্রিয়াকলাপটি ব্লক করছে OPTIONS। আমি প্রায় এক ঘন্টা এই কারণে ব্যয় করেছি:

একটি বলার ইঙ্গিতটি হল আপনি অনুরোধের 404সময় ত্রুটি পেয়ে যাচ্ছেন OPTIONS

এটি ঠিক করার জন্য, আপনাকে স্পষ্টভাবে আইআইএসকে অনুরোধ অবরুদ্ধ না করার কথা বলতে হবে OPTIONS

ফিল্টারিংয়ের অনুরোধে যান:

আইআইএস অনুরোধ ফিল্টারিং

বিকল্পগুলি অনুমোদিত কিনা তা নিশ্চিত করুন:

বিকল্পগুলি সত্য কিনা তা নিশ্চিত করুন

অথবা, কেবলমাত্র web.configনিম্নলিখিত সেটিংস সহ একটি তৈরি করুন :

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

7

আপনাকে স্টার্টআপ। সি ক্লাসে কনফিগার করতে হবে

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 ()" পদ্ধতিটি ব্যবহার করতে পারেন অথবা অন্যথায় নাথন এখানে যেমন করেছিলেন তেমন একটি বিশ্বব্যাপী এমভিসি ফিল্টার যুক্ত করতে পারেন।
জোশ মাউচ

এটি আমার জন্য নেট কোর 2.2 প্লাস যুক্ত অ্যাপ্লিকেশনটিতে কাজ করে .উসকর্স ("AllOAnyOrigin"); "কনফিগার" পদ্ধতিতে
হ্যারি সরশোগ

এটি "মাইক্রোসফ্ট.এস্পনেটকোর.কোর আপনার প্রকল্পে প্যাকেজ প্যাকেজ যুক্ত করা গুরুত্বপূর্ণ"। এটি উল্লেখ করার জন্য আপনাকে ধন্যবাদ!
ম্যাসন ঝাং

5

নীচের হিসাবে নেট কোর 3.1 এর সাথে এটির কাজ করছেন

1. অ্যাপ্লিকেশনটির মধ্যে আপনি ইউজকর্স কোডটি রেখেছেন তা নিশ্চিত করুন Uউসআউটিং (); এবং 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

এখন আমার সমস্ত কন্ট্রোলার বেসকন্ট্রোলারের কাছ থেকে উত্তরাধিকারী হবে এবং CORS সক্ষম করবে


আমার জন্য জিনিসগুলি কাজ করছে নাplace the UseCors code between app.UseRouting(); and app.UseAuthentication();
0014

1

পদক্ষেপ 1: আমাদের প্রকল্পে মাইক্রোসফ্ট.এএসপনেটকোর.কর্স প্যাকেজ দরকার। ইনস্টল করার জন্য সরঞ্জামগুলিতে যান -> নুগেট প্যাকেজ ম্যানেজার -> সমাধানের জন্য নিউগেট প্যাকেজগুলি পরিচালনা করুন। Microsoft.AspNetCore.Cors অনুসন্ধান করুন এবং প্যাকেজটি ইনস্টল করুন।

পদক্ষেপ 2: আমাদের পাত্রে সিওআরএস লাগাতে হবে যাতে এটি অ্যাপ্লিকেশনটি ব্যবহার করতে পারে। স্টার্টআপ.সি ক্লাসে, আসুন কনফিগার সার্ভিস পদ্ধতিতে গিয়ে CORS নিবন্ধভুক্ত করুন।

এখানে চিত্র বর্ণনা লিখুন

সুতরাং, আমাদের সার্ভার অ্যাপ্লিকেশনে, আসুন কন্ট্রোলারগুলিতে -> হোমকন্ট্রোলার.cs এ যান এবং সূচি পদ্ধতিতে (বা আপনার নির্দিষ্ট নিয়ামক এবং ক্রিয়াকলাপে) সক্ষম কর্ডস ডেকরেটার যুক্ত করুন:

এখানে চিত্র বর্ণনা লিখুন

বিস্তারিত জানতে এখানে ক্লিক করুন


0

উপরে উল্লিখিত সমস্ত কার্যবিধি কাজ করতে পারে বা নাও কাজ করতে পারে, বেশিরভাগ ক্ষেত্রে এটি কাজ করবে না। আমি সমাধান এখানে দিয়েছি

বর্তমানে আমি কৌণিক এবং ওয়েব এপিআই (। নেট কোর) এ কাজ করছি এবং নীচে ব্যাখ্যা করা CORS ইস্যুতে এসেছি

উপরে প্রদত্ত সমাধানটি সর্বদা কার্যকর হবে। 'বিকল্পগুলি' অনুরোধের সাথে 'বেনামে প্রমাণীকরণ' সক্ষম করা সত্যই প্রয়োজনীয়। এখানে উল্লিখিত সমাধানের সাথে আপনাকে আইআইএস সেটিংসের মতো উপরে উল্লিখিত সমস্ত পদক্ষেপগুলি করতে হবে না।

যাইহোক কেউ এই পোস্টটির সাথে আমার উপরের পোস্টটিকে সদৃশ হিসাবে চিহ্নিত করেছে, তবে আমি দেখতে পাচ্ছি যে এই পোস্টটি কেবল এএসপিএন কোর-এ কর্স সক্ষম করতে পারে তবে আমার পোস্টটি এএসপিএন কোর এবং অ্যাঙ্গুলারে সিওআরএস সক্ষম ও কার্যকর করছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.