2015-08-11 18 views
68

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

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

// 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 कॉन्फ़िगर कर सकते हैं?

+0

यहाँ लेख https://docs.microsoft.com/en-us/aspnet/core/security/cors – Elaine

उत्तर

104

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

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

    // ... 
} 

CorsPolicyBuilderbuilder में आप अपनी आवश्यकताओं के नीति कॉन्फ़िगर करने के लिए अनुमति देता है।

[EnableCors("MyPolicy")] 

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

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

    // ... 
} 
+5

मुझे लगता है कि एप्लिकेशन पाया जाता है। UseCors ("MyPolicy") मेरे एपीआई एंडपॉइंट्स के लिए काम नहीं करता था। मुझे प्रश्न में नियंत्रक अंतराल पर स्पष्ट रूप से [EnableCors ("MyPolicy")] की आवश्यकता थी। – robbpriestley

+5

आपको किसी भी अंतराल से पहले उस रेखा को अवश्य रखना होगा। –

+2

[आधिकारिक दस्तावेज़] से [https://docs.microsoft.com/en-us/aspnet/core/security/cors#enabling-cors-with-middleware): "अपने पूरे एप्लिकेशन के लिए CORS को सक्षम करने के लिए CORS जोड़ें 'UseCors' एक्सटेंशन विधि का उपयोग करके अपने अनुरोध पाइपलाइन पर मिडलवेयर। ध्यान दें कि सीओआरएस मिडलवेयर आपके ऐप में किसी परिभाषित अंतराल से पहले होना चाहिए कि आप क्रॉस-मूल अनुरोधों का समर्थन करना चाहते हैं (उदा। 'किसी भी कॉल से पहले' UseMvc')।" –

21

Henk's answer के आधार पर मैं विशिष्ट डोमेन साथ आने के लिए सक्षम किया गया है अब आप नियंत्रकों और कार्रवाई करने के लिए नीति लागू करने के लिए इस नाम का उपयोग कर सकते हैं , विधि मैं अनुमति देना चाहते हैं और यह भी शीर्ष लेख मैं के लिए CORS सक्षम करना चाहते हैं:

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

उपयोग:

[EnableCors("AllowSpecific")] 
+0

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

+7

'लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए' मुझे नहीं लगता कि यह मामला यहां है और हेनक का जवाब पहले से ही चिह्नित किया गया है। यदि आप विशिष्ट डोमेन को अनुमति देना चाहते हैं तो मेरा जवाब एक ऐड-ऑन था। – Oluwafemi

38

यह .Net-Core 1.1

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

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

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

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

.Net-Core 2.0

  • के लिए अपनी परियोजना
  • करने के लिए Microsoft.AspNetCore.Cors nuget पैकेज जोड़ें ConfigureServices विधि में, services.AddMvc() कॉल करने से पहले, जोड़ें:

    services.AddCors(options => 
        { 
         options.AddPolicy("AllowAll", 
          builder => 
          { 
           builder 
           .AllowAnyOrigin() 
           .AllowAnyMethod() 
           .AllowAnyHeader() 
           .AllowCredentials(); 
          }); 
        }); 
    
  • Configure विधि में, app.UseMvc() कॉल करने से पहले, जोड़ने app.UseCors("AllowAll");

    AllowAll नीति का नाम है जिसे हमें ऐप में उपयोग करने की आवश्यकता है। उपयोगकर्ता कोर। यह कोई नाम हो सकता है।

+2

सच, सोचा कि मैं उनमें से केवल एक को सक्षम कर सकता हूं! – eugeneK

+2

धन्यवाद। मेरे पास UseMvc के बाद मेरे AddCors थे और यह ठीक से काम नहीं कर रहा था। आपका एकमात्र उत्तर है जो इसका उल्लेख करता है। – JesseNewman19

+0

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

-1

`

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")); 
     });    
    } 

`

+0

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