Προγραμματισμός

Πώς να ενεργοποιήσετε το CORS στο Web API σας

Οι περιορισμοί ασφαλείας στην πολιτική ασφάλειας του προγράμματος περιήγησής σας εμποδίζουν το πρόγραμμα περιήγησής σας να υποβάλλει αιτήματα AJAX σε διακομιστή άλλου τομέα. Αυτό είναι επίσης γνωστό ως πολιτική ίδιας προέλευσης. Με άλλα λόγια, η ενσωματωμένη ασφάλεια του προγράμματος περιήγησης εμποδίζει μια ιστοσελίδα ενός τομέα να εκτελεί κλήσεις AJAX σε άλλον τομέα.

Εδώ έρχεται η διάσωση του CORS (Cross-Origin Resource Sharing). Το CORS είναι ένα πρότυπο W3C που σας επιτρέπει να ξεφύγετε από την ίδια πολιτική προέλευσης που υιοθετήθηκε από τα προγράμματα περιήγησης για να περιορίσετε την πρόσβαση από έναν τομέα σε πόρους που ανήκουν σε άλλο τομέα. Μπορείτε να ενεργοποιήσετε το CORS για το Web API σας χρησιμοποιώντας το αντίστοιχο πακέτο Web API (ανάλογα με την έκδοση του Web API που χρησιμοποιείται) ή το OWIN middleware.

Σημειώστε ότι η προέλευση ενός αιτήματος αποτελείται από ένα σχήμα, έναν κεντρικό υπολογιστή και έναν αριθμό θύρας. Έτσι, δύο αιτήματα θεωρούνται ότι προέρχονται από την ίδια προέλευση εάν έχουν το ίδιο σχήμα, τον κεντρικό υπολογιστή και τον αριθμό θύρας. Εάν κάποιο από αυτά διαφέρει, τα αιτήματα θεωρούνται ότι είναι πολλαπλής προέλευσης, δηλαδή δεν ανήκουν σε ίδιες προελεύσεις.

Ενεργοποιήστε την υποστήριξη CORS στο ASP.NET Web API

Το ASP.NET Web API παρέχει εξαιρετική υποστήριξη για CORS. Για να παρέχετε υποστήριξη για CORS στο ASP.NET Web API 2, πρέπει να χρησιμοποιήσετε το πακέτο Microsoft.AspNet.WebApi.Cors NuGet. Για να εγκαταστήσετε αυτό το πακέτο, μπορείτε να εκτελέσετε την ακόλουθη εντολή από την κονσόλα διαχείρισης πακέτων NuGet.

Εγκατάσταση-πακέτου Microsoft.AspNet.WebApi.Cors

Εναλλακτικά, μπορείτε να επιλέξετε το έργο σας στο παράθυρο Solution Explorer και να εγκαταστήσετε το πακέτο μέσω του διαχειριστή πακέτων NuGet.

Εάν χρησιμοποιείτε Web API 1.0, μπορείτε να ενεργοποιήσετε την υποστήριξη CORS συμπεριλαμβανομένων των ακόλουθων δηλώσεων στο πρόγραμμα χειρισμού συμβάντων Application_BeginRequest του αρχείου Global.asax.cs.

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Origin", allowOrigin);

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Methods", "GET, POST");

Σημειώστε ότι το "allowOrigin" εδώ είναι μια μεταβλητή συμβολοσειράς που περιέχει την προέλευση του αιτήματος που θέλει να αποκτήσει πρόσβαση στον πόρο.

Η υποστήριξη για CORS μπορεί να ενεργοποιηθεί σε τρία επίπεδα. Αυτά περιλαμβάνουν τα ακόλουθα:

  • Επίπεδο δράσης
  • Επίπεδο ελεγκτή
  • Παγκόσμιο επίπεδο

Ενεργοποίηση CORS σε παγκόσμιο επίπεδο

Για να ενεργοποιήσετε το CORS σε παγκόσμιο επίπεδο, θα πρέπει να επωφεληθείτε από τη μέθοδο EnableCors της κλάσης HttpConfiguration όπως φαίνεται στο απόσπασμα κώδικα που δίνεται παρακάτω.

Δημόσιο στατικό άκυρο Μητρώο (HttpConfiguration config)

        {

string origin = "// localhost: 50164 / WebClient /";

EnableCorsAttribute cors = νέο EnableCorsAttribute (προέλευση, "*", "GET, POST");

config.EnableCors (cors);

// Καθορίστε εδώ τη διαμόρφωση και τις υπηρεσίες του API Ιστού

// Καθορίστε τις διαδρομές του API Ιστού εδώ

        }

    }

Ανατρέξτε στο απόσπασμα κώδικα που δίνεται παραπάνω. Σημειώστε πώς έχει καθοριστεί η προέλευση του αιτήματος. Η παράμετρος * υπονοεί όλες τις κεφαλίδες αιτήματος. Έτσι, τα αιτήματα GET και POST από τον καθορισμένο τομέα θα γίνουν αποδεκτά, όλα τα άλλα αιτήματα θα απορριφθούν.

Ενεργοποίηση CORS σε επίπεδο ελεγκτή

Μπορείτε επίσης να ενεργοποιήσετε την υποστήριξη CORS σε επίπεδο ελεγκτή. Για να το κάνετε αυτό, καθορίστε το χαρακτηριστικό [EnableCors] στον ελεγκτή σας Web API όπως φαίνεται παρακάτω.

  [EnableCors (Origins: "// localhost: 50164 /", κεφαλίδες: "*", μέθοδοι: "*")]

δημόσια τάξη AuthorsController: ApiController

    {  

// Γράψτε εδώ τις μεθόδους ελέγχου του Web API

    }

Ενεργοποίηση CORS σε επίπεδο δράσης

Ομοίως, μπορείτε επίσης να ενεργοποιήσετε το CORS σε επίπεδο ενέργειας χρησιμοποιώντας το χαρακτηριστικό [EnableCORS]. Εδώ είναι ένα παράδειγμα που δείχνει πώς γίνεται αυτό.

δημόσια τάξη AuthorsController: ApiController

    {

[EnableCors (Origins: "// localhost: 50164 /", κεφαλίδες: "*", μέθοδοι: "*")]

δημόσια IEnumerable Get ()

        {

επιστροφή νέας συμβολοσειράς [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Απενεργοποιήστε το CORS για μια συγκεκριμένη ενέργεια

Τώρα, ίσως χρειαστεί να απενεργοποιήσετε το CORS για μια συγκεκριμένη ενέργεια ή μια ομάδα ενεργειών. Αυτή η δυνατότητα μπορεί να είναι βολική όταν έχετε ήδη ενεργοποιήσει το CORS σε παγκόσμιο επίπεδο και τώρα θέλετε να το απενεργοποιήσετε για μία από περισσότερες ενέργειες για λόγους ασφαλείας. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να το επιτύχετε χρησιμοποιώντας το χαρακτηριστικό [DisableCors].

[DisableCors ()]

δημόσια IEnumerable Get ()

   {

επιστροφή νέας συμβολοσειράς [] {"Joydip Kanjilal", "Steve Smith"};

   }

Εάν χρησιμοποιείτε ASP.NET Core, θα πρέπει να προσθέσετε το πακέτο Microsoft.AspNetCore.Cors μέσω NuGet στο έργο σας και στη συνέχεια να γράψετε την ακόλουθη δήλωση στο αρχείο Startup.cs για να ρυθμίσετε την υποστήριξη CORS.

public void ConfigureServices (υπηρεσίες IServiceCollection)

{

υπηρεσίες.AddCors ();

}

Μπορείτε να ενεργοποιήσετε το CORS χρησιμοποιώντας το μεσαίο λογισμικό CORS - μπορείτε να επωφεληθείτε από τη μέθοδο επέκτασης UseCors ως προς αυτό. Εναλλακτικά, μπορείτε να ενεργοποιήσετε το CORS στο χειριστήριο ή στα επίπεδα δράσης χρησιμοποιώντας το χαρακτηριστικό EnableCors με τον ίδιο τρόπο που κάναμε νωρίτερα σε αυτό το άρθρο. Ομοίως, για την απενεργοποίηση του CORS, μπορείτε να χρησιμοποιήσετε το χαρακτηριστικό [DisableCors].