Cara mengaktifkan CORS pada API Web anda

Sekatan keselamatan pada dasar keselamatan penyemak imbas anda menghalang penyemak imbas web anda membuat permintaan AJAX ke pelayan di domain lain. Ini juga dikenali sebagai dasar asal sama. Dengan kata lain, keselamatan penyemak imbas terbina dalam menghalang laman web satu domain daripada melaksanakan panggilan AJAX pada domain lain.

Di sinilah CORS (Cross-Origin Resource Sharing) membantu. CORS adalah standard W3C yang membolehkan anda menjauhi dasar asal yang diguna pakai oleh penyemak imbas untuk menyekat akses dari satu domain ke sumber yang dimiliki oleh domain lain. Anda boleh mengaktifkan CORS untuk API Web anda menggunakan paket Web Web masing-masing (bergantung pada versi Web API yang digunakan) atau OWIN middleware.

Perhatikan bahawa asal permintaan terdiri daripada skema, host, dan nombor port. Jadi, dua permintaan dianggap berasal dari asal yang sama jika mempunyai skema, host dan nombor port yang sama. Sekiranya ada yang berbeza, permintaan dianggap berasal dari silang, iaitu, bukan milik asal yang sama.

Aktifkan sokongan CORS di ASP.NET Web API

ASP.NET Web API memberikan sokongan yang sangat baik untuk CORS. Untuk memberikan sokongan untuk CORS di ASP.NET Web API 2, anda perlu menggunakan pakej Microsoft.AspNet.WebApi.Cors NuGet. Untuk memasang pakej ini, anda boleh menjalankan perintah berikut dari konsol pengurus pakej NuGet.

Pasang-Pakej Microsoft.AspNet.WebApi.Cors

Sebagai alternatif, anda boleh memilih projek anda di tetingkap Penyelesaian Penyelesaian dan memasang pakej melalui pengurus pakej NuGet.

Sekiranya anda menggunakan Web API 1.0, anda boleh mengaktifkan sokongan CORS termasuk pernyataan berikut dalam pengendali acara Application_BeginRequest dari fail Global.asax.cs.

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

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

Perhatikan bahawa "allowOrigin" di sini adalah pemboleh ubah rentetan yang mengandungi asal permintaan yang ingin mengakses sumber. 

Sokongan untuk CORS dapat diaktifkan pada tiga tahap. Ini termasuk yang berikut:

  • Tahap tindakan
  • Tahap pengawal
  • Tahap global

Dayakan CORS di peringkat Global

Untuk mengaktifkan CORS di peringkat Global, anda perlu memanfaatkan kaedah EnableCors dari kelas HttpConfiguration seperti yang ditunjukkan dalam coretan kod yang diberikan di bawah.

Daftar tidak sah awam (konfigurasi HttpConfiguration)

        {

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

            EnableCorsAttribute cors = EnableCorsAttribute baru (asal, "*", "DAPATKAN, POST");

            config.EnableCors (cors);

            // Nyatakan konfigurasi dan perkhidmatan API Web di sini

            // Nyatakan laluan API Web di sini          

        }

    }

Rujuk coretan kod yang diberikan di atas. Perhatikan bagaimana asal permintaan telah ditentukan. Parameter * menyiratkan semua tajuk permintaan. Oleh itu, permintaan GET dan POST dari domain yang ditentukan akan diterima, semua permintaan lain akan ditolak.

Aktifkan CORS di peringkat Pengawal

Anda juga boleh mengaktifkan sokongan CORS di peringkat pengawal. Untuk melakukan ini, tentukan atribut [EnableCors] ke pengawal API Web anda seperti yang ditunjukkan di bawah.

  [EnableCors (asal: "// localhost: 50164 /", tajuk: "*", kaedah: "*")]

    kelas awam AuthorsController: ApiController

    {  

        // Tulis kaedah pengawal API Web anda di sini

    }

Dayakan CORS di peringkat Tindakan

Begitu juga, anda juga boleh mengaktifkan CORS pada tahap tindakan menggunakan atribut [EnableCORS]. Berikut adalah contoh yang menggambarkan bagaimana ini dilakukan.

kelas awam AuthorsController: ApiController

    {

        [EnableCors (asal: "// localhost: 50164 /", tajuk: "*", kaedah: "*")]

        awam IEnumerable Get ()

        {

            kembalikan rentetan baru [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Lumpuhkan CORS untuk tindakan tertentu

Sekarang, anda mungkin perlu mematikan CORS untuk tindakan tertentu atau sekumpulan tindakan. Ciri ini mungkin berguna apabila anda sudah mengaktifkan CORS di peringkat global dan sekarang anda ingin melumpuhkannya untuk salah satu tindakan lagi kerana alasan keselamatan. Coretan kod berikut menggambarkan bagaimana anda boleh mencapainya menggunakan atribut [DisableCors].

[DisableCors ()]

awam IEnumerable Get ()

   {

      kembalikan rentetan baru [] {"Joydip Kanjilal", "Steve Smith"};

   }

Sekiranya anda menggunakan ASP.NET Core, anda harus menambahkan pakej Microsoft.AspNetCore.Cors melalui NuGet ke projek anda dan kemudian tulis pernyataan berikut dalam fail Startup.cs untuk menyiapkan sokongan CORS.

kekosongan awam ConfigureServices (perkhidmatan IServiceCollection)

{

    perkhidmatan.AddCors ();

}

Anda boleh mengaktifkan CORS menggunakan alat tengah CORS - anda boleh memanfaatkan kaedah peluasan UseCors dalam hal ini. Sebagai alternatif, anda boleh mengaktifkan CORS pada pengawal atau tahap tindakan menggunakan atribut EnableCors dengan cara yang sama seperti yang kita lakukan sebelumnya dalam artikel ini. Begitu juga, untuk melumpuhkan CORS, anda boleh menggunakan atribut [DisableCors].