Saya punya metode aksi sederhana, yang mengembalikan beberapa json. Ini berjalan di ajax.example.com. Saya perlu mengakses ini dari situs lain someothersite.com.
Jika saya mencoba menyebutnya, saya mendapatkan yang diharapkan ...:
Origin http://someothersite.com is not allowed by Access-Control-Allow-Origin.
Saya tahu dua cara untuk mengatasi ini: JSONP dan membuat HttpHandler kustom untuk mengatur header.
Apakah tidak ada cara yang lebih sederhana?
Apakah tidak mungkin untuk tindakan sederhana untuk mendefinisikan daftar asal yang diizinkan - atau memungkinkan semua orang? Mungkin filter tindakan?
Optimal adalah ...:
return json(mydata, JsonBehaviour.IDontCareWhoAccessesMe);
json
asp.net-mvc-3
cors
asp.net-ajax
Kjensen
sumber
sumber
Jawaban:
Untuk Pengontrol ASP.NET MVC biasa
Buat atribut baru
Tandai tindakan Anda:
Untuk ASP.NET Web API
Tag seluruh pengontrol API:
Atau panggilan API individu:
Untuk Internet Explorer <= v9
IE <= 9 tidak mendukung CORS. Saya telah menulis javascript yang akan secara otomatis merutekan permintaan tersebut melalui proxy. Semuanya 100% transparan (Anda hanya perlu menyertakan proxy dan skrip saya).
Unduh menggunakan nuget
corsproxy
dan ikuti instruksi yang disertakan.Posting blog | Kode sumber
sumber
Jika Anda menggunakan IIS 7+, Anda dapat menempatkan file web.config ke root folder dengan ini di bagian system.webServer:
Lihat: http://msdn.microsoft.com/en-us/library/ms178685.aspx Dan: http://enable-cors.org/#how-iis7
sumber
Saya mengalami masalah di mana browser menolak untuk menayangkan konten yang telah diambil ketika permintaan melewati cookie (misalnya, xhr memilikinya
withCredentials=true
), dan situs telahAccess-Control-Allow-Origin
diatur untuk*
. (Kesalahan di Chrome adalah, "Tidak dapat menggunakan wildcard di Access-Control-Allow-Origin ketika flag kredensial benar.")Membangun jawaban dari @ jgauffin, saya membuat ini, yang pada dasarnya adalah cara untuk mengatasi pemeriksaan keamanan browser tertentu, jadi peringatan emptor.
sumber
Ini sangat sederhana, cukup tambahkan ini di web.config
Di Origin taruh semua domain yang memiliki akses ke server web Anda, di tajuk taruh semua tajuk mungkin yang bisa digunakan oleh permintaan ajax http apa pun, dalam metode taruh semua metode yang Anda izinkan di server Anda
salam :)
sumber
Terkadang kata kerja OPTIONS juga menyebabkan masalah
Cukup: Perbarui web.config Anda dengan yang berikut ini
Dan perbarui header layanan web / pengontrol dengan httpGet dan httpOptions
sumber
WebAPI 2 sekarang memiliki paket untuk CORS yang dapat diinstal menggunakan: Instal-Paket Microsoft.AspNet.WebApi.Cors -pre -project WebServic
Setelah ini diinstal, ikuti ini untuk kode: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
sumber
Tambahkan baris ini ke metode Anda, Jika Anda menggunakan API.
sumber
Tutorial ini sangat bermanfaat. Untuk memberikan ringkasan cepat:
Gunakan paket CORS yang tersedia di Nuget:
Install-Package Microsoft.AspNet.WebApi.Cors
Di
WebApiConfig.cs
file Anda , tambahkanconfig.EnableCors()
keRegister()
metode.Tambahkan atribut ke pengontrol yang Anda butuhkan untuk menangani kor:
[EnableCors(origins: "<origin address in here>", headers: "*", methods: "*")]
sumber
sumber
Cara lain adalah kita dapat menambahkan kode seperti di bawah ini di file webApiconfig.cs.
config.EnableCors (new EnableCorsAttribute (" ", header: " ", methods: "*", exposedHeaders: "TestHeaderToExpose") {SupportsCredentials = true});
Atau kita dapat menambahkan kode di bawah ini dalam file Global.Asax.
Saya telah menulisnya untuk opsi. Silakan modifikasi yang sama sesuai kebutuhan Anda.
Selamat Coding !!
sumber
Setelah berjuang sepanjang malam akhirnya saya berhasil. Setelah beberapa debug saya menemukan masalah yang saya hadapi adalah bahwa klien saya mengirim permintaan Opsi preflight yang disebut untuk memeriksa apakah aplikasi diizinkan untuk mengirim permintaan posting dengan asal, metode dan header yang disediakan. Saya tidak ingin menggunakan Owin atau APIController, jadi saya mulai menggali dan menemukan solusi berikut hanya dengan ActionFilterAttribute. Terutama bagian "Akses-Kontrol-Izinkan Header" sangat penting, karena header yang disebutkan di sana harus cocok dengan header permintaan Anda akan kirim.
Akhirnya, metode tindakan MVC saya terlihat seperti ini. Penting di sini adalah untuk juga menyebutkan Opsi HttpVerbs, karena jika tidak permintaan preflight akan gagal.
sumber
Di Web.config masukkan yang berikut ini
sumber
Jika Anda menggunakan IIS, saya sarankan mencoba modul IIS CORS .
Sangat mudah untuk mengkonfigurasi dan bekerja untuk semua jenis pengontrol.
Berikut ini contoh konfigurasi:
sumber
Saya menggunakan DotNet Core MVC dan setelah berjuang selama beberapa jam dengan paket nuget, Startup.cs, atribut, dan tempat ini, saya cukup menambahkan ini ke aksi MVC:
Saya menyadari ini cukup kikuk, tapi itu yang saya butuhkan, dan tidak ada lagi yang ingin menambahkan header itu. Saya harap ini membantu orang lain!
sumber