Saya baru-baru ini ditingkatkan dari Visual Studio 2010 ke Visual Studio 2012 RC. Pemasang juga menginstal IIS 8 Express yang sekarang digunakan Visual Studio sebagai server web default.
IIS 8 memblokir permintaan WEB API saya yang menggunakan kata kerja PUT AND DELETE. IIS mengembalikan kesalahan 405 The requested resource does not support http method 'PUT'
,.
Saya tahu orang-orang memiliki masalah dengan ini di masa lalu dan ada beberapa pesan tentang hal itu di Stack Overflow. Dengan IIS 7 Express solusinya adalah menghapus instalasi WebDav. Sayangnya saya tidak melihat cara untuk melakukannya dengan IIS 8.
Saya sudah mencoba mengedit bagian WebDav dari applicationhost.config tetapi itu tidak membantu. Misalnya saya menghapus <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
dari file konfigurasi.
Saya sudah menghabiskan terlalu lama untuk ini. Harus ada cara sederhana untuk mengaktifkan PUT dan DELETE?
sumber
ExtensionlessUrl-Integrated-4.0
.Jawaban:
Baik. Saya akhirnya sampai di bagian bawah ini. Anda perlu melompati beberapa simpai agar kata kerja PUT dan DELETE berfungsi dengan benar dengan IIS8. Bahkan jika Anda menginstal kandidat rilis VS 2012 dan membuat proyek WEB API baru Anda akan menemukan bahwa metode PUT dan DELETE sampel mengembalikan 404 kesalahan di luar kotak.
Untuk menggunakan kata kerja PUT dan DELETE dengan API Web Anda perlu mengedit% userprofile% \ Documents \ iisexpress \ config \ applicationhost.config dan menambahkan kata kerja ke penangan ExtensionlessUrl sebagai berikut:
Ubah baris ini:
untuk:
Selain hal-hal di atas, Anda harus memastikan WebDAV tidak mengganggu permintaan Anda. Ini dapat dilakukan dengan mengomentari baris-baris berikut dari applicationhost.config.
Ketahuilah juga bahwa konvensi API Web default adalah bahwa nama metode Anda harus sama dengan kata kerja HTTP yang dipanggil. Misalnya, jika Anda mengirim permintaan penghapusan HTTP, metode Anda, secara default, harus dinamai Hapus.
sumber
WebDAVModule
dari bagian modul, sesuai jawaban Santosh Sah .Ubah file Web.Config Anda seperti di bawah ini. Itu akan bertindak seperti pesona.
Dalam simpul
<system.webServer>
tambahkan bagian kode di bawah iniSetelah menambahkan, Web.Config Anda akan terlihat seperti di bawah ini
sumber
WebDAVModule
yang relevan."ExtensionlessUrlHandler-Integrated-4.0"
(seperti dalam jawaban di atas) sementara IIS 8.5 telah berganti nama menjadi"ExtensionlessUrl-Integrated-4.0"
(juga disebutkan oleh Mark S. Nama pawang ditampilkan dalam halaman kesalahan IIS, setelah Anda menerima kesalahan, jadi seharusnya sepele untuk mengetahui yang mana yang harus diatur. Saya menggunakan kedua nama untuk mendukung lingkungan hosting yang berbeda.Hapus WebDAV berfungsi dengan baik untuk kasus saya:
itu selalu lebih baik untuk menyelesaikan masalah melalui web.config daripada akan memperbaikinya melalui iis atau machine.config untuk mengabulkan itu tidak akan terjadi jika aplikasi di-host di komputer lain
sumber
Perbarui web.config Anda
http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx
Menghapus kebutuhan untuk memodifikasi konfigurasi host Anda.
sumber
Di Asp.Net Web API - webconfig. Ini berfungsi di semua browser.
Tambahkan kode berikut di dalam tag System.web
Ganti tag system.webserver Anda dengan kode di bawah ini
sumber
system.webserver
bagian ini sudah cukup - pastikan Anda memiliki nama yang tepat untuk penangan url tanpa ekstensi.ini bekerja untuk saya di iis8 bersama dengan beberapa jawaban lainnya. Kesalahan saya adalah 404.6 khusus
sumber
Hanya pembaruan cepat untuk siapa pun yang mungkin mengalami masalah ini. Mulai hari ini, mengubah% userprofile% \ Documents \ iisexpress \ config \ applicationhost.config TIDAK berfungsi lagi (ini berfungsi dengan baik sampai sekarang, tidak yakin apakah ini karena pembaruan Windows). Setelah berjam-jam frustrasi, saya mengubah web.config untuk menambahkan penangan ini ke system.webserver agar berfungsi:
sumber
Aktifkan CORS (bagus dan rapi)
1. Tambahkan paket nuget CORS
2. pada file WebApiConfig.cs untuk Mendaftar metode tambahkan kode di bawah ini:
mis:
menggunakan System.Web.Http;
3.Tambahkan kode di bawah ini ke namespace controller termasuk get, post, delete, put, atau metode http apa pun
ex:
referensi: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
sumber
Setelah tidak ada yang berhasil, saya dapat menyelesaikan ini dengan langkah-langkah di bawah ini:
• Tidak memilih pengaturan IIS 'WEB DAV PUBLISHING', saat menginstal IIS. • INETMGR - Situs Web Default - Pemfilteran Permintaan - HTTP Verbs - PUT as True
sumber
Setelah pencarian tanpa akhir dan mencoba jawaban yang sudah disediakan (menambahkan PUT, DELETE kata kerja dan hapus WEBdav) itu tidak berfungsi.
Saya pergi ke pengaturan pencatatan IIS:> Lihat File Log. Dalam kasus saya W3SVC4 adalah folder dengan tanggal terbaru, membuka folder, mencari file log terbaru dan melihat entri ini: GET / Ditolak-Oleh-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD
Metode Pembaruan terdaftar dengan kata kerja GET, aneh kan? Jadi saya mencari Google untuk Rejected-By-UrlScan dan menemukan tautan ini: UrlScan Broke My Blog .
Saya pergi ke sini:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini
Pada dasarnya, UrlScan memblokir kata kerja PUT dan DELETE. Saya membuka file INI, menambahkan PUT dan DELETE ke AllowVerbs dan menghapusnya dari daftar DenyVerbs. Saya menyimpan file INI dan berhasil! Jadi bagi saya langkah-langkah ini diperlukan di sebelah petunjuk ExtensionlessUrlHandler.
Windows Webserver 2008 R2 (64 bit), IIS 7.5. Saya menggunakan ini dalam kombinasi dengan DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Metode pembaruan saya:
sumber
Untuk PHP, itu hanya:
Saya membayangkan ini akan bekerja dengan penangan lain juga.
sumber
Selain semua solusi di atas, periksa apakah Anda memiliki " id " atau parameter khusus yang ditentukan dalam metode DELETE cocok dengan konfigurasi rute.
Jika Anda menekan dengan 405 kesalahan berulang, lebih baik mengatur ulang metode tanda tangan ke default seperti di atas dan coba.
Konfigurasi rute secara default akan mencari id di URL. Jadi id nama parameter penting di sini kecuali jika Anda mengubah konfigurasi rute di bawah folder App_Start .
Anda dapat mengubah tipe data id .
Misalnya metode di bawah ini akan berfungsi dengan baik:
Catatan: Pastikan juga Anda melewatkan data melalui url bukan metode data yang akan membawa muatan sebagai konten isi.
Contoh:
Semoga ini bisa membantu.
sumber
Saya telah menghadapi masalah yang sama dengan Anda, kemudian menyelesaikannya, Ini adalah solusinya, saya berharap ini bisa membantu
Pertama
Dalam IIS
modules
Configuration, loop up WebDAVModule , jika server web Anda memilikinya, kemudian hapusKedua
Dalam
handler mappings
konfigurasi IIS , Anda dapat melihat daftar penangan yang diaktifkan, untuk memilihthe PHP item
, mengeditnya, pada halaman edit, klik tombol pembatasan permintaan, lalu pilihthe verbs tab
dalam modal, di tentukan kata kerja yang akan ditangani label, centangall verbs radio
, kemudian klik ok, Anda juga mungkin melihat peringatan, itu menunjukkan kepada kita bahwa menggunakan tanda kutip ganda untuk eksekusi PHP-CGI, lalu lakukanjika dilakukan, lalu restart server IIS, itu akan baik-baik saja
sumber
Saya tidak yakin apakah Anda telah mengedit file konfigurasi yang benar. Coba langkah-langkah berikut
buka% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config
Secara default di bawah entri yang diberikan dikomentari dalam file applicationhost.config. batalkan komentar entri ini.
sumber
Berikut adalah cara Anda mengizinkan Verb HTTP tambahan menggunakan IUI Manager GUI.
Di IIS Manager, pilih situs yang Anda inginkan untuk PUT atau DELETE.
Klik opsi "Permintaan Pemfilteran". Klik tab "HTTP Verbs".
Klik tautan "Bolehkan Verb ..." di bilah sisi.
Di kotak yang muncul ketik "HAPUS", klik OK.
Klik tautan "Bolehkan Verb ..." di bilah sisi lagi.
Di kotak yang muncul ketik "PUT", klik OK.
sumber
Saya menggunakan file ashx dalam aplikasi MVC dan tidak ada jawaban di atas yang berfungsi untuk saya. IIS 10.
Inilah yang berhasil. Alih-alih mengubah " ExtensionlessUrl-Integrated-4.0 " di IIS atau web.config saya mengubah " SimpleHandlerFactory-Integrated-4.0 " untuk file " * .ashx ":
sumber
Alasan lain dapat menjadi sebagai berikut:
Saya mengubah metode Url untuk Web Api saya menurut jawaban ini :
Tetapi metode ini menciptakan tautan seperti:
Ini berfungsi dengan benar dengan MENDAPATKAN dan permintaan POST tetapi tidak dengan PUT atau HAPUS.
Jadi saya hanya menggantinya dengan:
dan itu memperbaiki masalah.
sumber
Di IIS 8.5 / Windows 2012R2, Tidak ada yang disebutkan di sini yang berfungsi untuk saya. Saya tidak tahu apa yang dimaksud dengan Menghapus WebDAV tapi itu tidak menyelesaikan masalah bagi saya.
Yang membantu saya adalah langkah-langkah di bawah ini;
Sekarang semuanya berfungsi.
sumber
Anda dapat mengonversi metode Hapus sebagai POST menjadi;
sumber