ASP.NET Web API - PUT & DELETE Verbs Tidak Diizinkan - IIS 8

145

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?

Menandai
sumber
Ini masih rusak di versi RTM. Hanya menghabiskan 3 jam untuk ini ... Yang dibutuhkan hanyalah menambahkan kata kerja tambahan ExtensionlessUrl-Integrated-4.0.
leppie
1
Saya tidak berpikir ini rusak tetapi karena desain. Saya pikir mengubah perilaku default akan mengganggu WebDAV dan merusak kompatibilitas. Ini juga tidak berfungsi dengan IIS7 ketika WebDAV diinstal.
Tandai
Saya juga hanya membuang 3 jam untuk ini ... 6 tahun setelah posting ini.
Brian Jenkins
silakan lihat stackoverflow.com/a/55134621/4746570
BehrouzMoslem

Jawaban:

162

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:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

untuk:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Selain hal-hal di atas, Anda harus memastikan WebDAV tidak mengganggu permintaan Anda. Ini dapat dilakukan dengan mengomentari baris-baris berikut dari applicationhost.config.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

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.

Menandai
sumber
9
Untuk masalah yang sama dengan kata kerja OPTIONS pada IIS8 (di mana ada sesuatu yang mencegat sebelum penangan Anda) coba <hapus name = "OPTIONSVerbHandler" /> di web.config Anda. Untuk itu, saya akan menyarankan menggunakan teknik "hapus" di web.config lokal Anda agar tidak dipusingkan dengan applicationhost.config bila memungkinkan sebagai aturan umum
Jason
7
Alih-alih menghapus WebDAV pada tingkat server yang mungkin memiliki efek knock-on, lebih baik untuk menghapusnya dari proyek Anda seperti yang ditunjukkan di sini: stackoverflow.com/a/14465655/428280
Twisted
Lalu apa? Mungkin bahkan itu akan bekerja secara lokal tetapi tidak akan bekerja pada Azure
Toolkit
3
Jawaban yang menginstruksikan untuk mengubah pengaturan sistem, bahkan pada mesin dev, tidak bisa menjadi jawaban. Ini memecahkan gejala dan tidak benar-benar membantu tim dan produksi. Apakah Anda akan meniru ini di setiap mesin? Lihat jawaban Santosh Sah.
André Werlang
Selain itu, saya juga perlu menghapus WebDAVModuledari bagian modul, sesuai jawaban Santosh Sah .
Ivaylo Slavov
125

Ubah file Web.Config Anda seperti di bawah ini. Itu akan bertindak seperti pesona.

Dalam simpul <system.webServer>tambahkan bagian kode di bawah ini

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

Setelah menambahkan, Web.Config Anda akan terlihat seperti di bawah ini

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>
Santosh Prasad Sah
sumber
3
Menghapus WebDavModule adalah cara yang benar untuk memulai masalah ini.
MissRaphie
6
Menyimpan hari saya: <module runAllManagedModulesForAllRequests = "true"> <hapus name = "WebDAVModule" /> </modules>
Peter Stegnar
3
Tajuk khusus tidak diperlukan karena terkait dengan CORS dan dengan cara ini Anda mendorong ke celah keamanan. Hanya bagian WebDAVModuleyang relevan.
André Werlang
2
Jawaban ini benar dengan satu-satunya pengecualian bahwa nama pawang dapat berbeda di seluruh versi IIS - misalnya 7.5 menggunakan "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.
Ivaylo Slavov
7
Itu membuat saya mati sedikit di dalam setiap kali saya melihat ini - runAllManagedModulesForAllRequests = "true" - sebagai solusi britishdeveloper.co.uk/2010/06/…
Oliver
61

Hapus WebDAV berfungsi dengan baik untuk kasus saya:

<modules>
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
       type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

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

Peter. Wang
sumber
Ini bekerja untuk saya, di mana yang lain tidak karena alasan tertentu (ada di IIS 8.5) terima kasih
John
4
Hapus WebDAVModule bekerja untuk saya, tidak perlu menghapus handler WebDAV (IIS 8.0).
PeterS
3
hanya menghapus karya webdav pada kerangka 4.6.2 iis8.5
Abdul Rehman Sayed
45

Perbarui web.config Anda

  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0"
           path="*."
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

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.

Chris Marisic
sumber
1
Saya sudah menulis baris lain tetapi tidak berhasil. setelah menambahkan baris <remove name = "WebDAVModule" /> dan <remove name = "WebDAV" /> itu berfungsi sekarang. Terima kasih banyak & 1 suara dari sisi saya.
Banketeshvar Narayan
Ini berfungsi, tetapi mungkin gagal karena penguncian konfigurasi mencegah penggunaan <modules> di web.config. Dalam hal ini, Anda harus menonaktifkan kunci konfigurasi di applicationHost.config. Jika Anda tidak memiliki kontrol atas applicationHost.config karena alasan tertentu, maka pendekatan ini tidak dapat digunakan.
Florian Winter
Bekerja dengan IIS10, meskipun saya hanya menggunakan "*" sebagai kata kerja
Javier G.
1
Bekerja dengan IIS 10 dan Web API 2. Bekerja, saya harus menambahkan, setelah selusin "solusi" yang saya temukan online tidak. Terima kasih!
Matt West
@ ChrisMarisic: Ini bekerja seperti pesona bagi saya terima kasih!
Div Tiwari
18

Di Asp.Net Web API - webconfig. Ini berfungsi di semua browser.

Tambahkan kode berikut di dalam tag System.web

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

Ganti tag system.webserver Anda dengan kode di bawah ini

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>

Ganesha
sumber
Saya memiliki masalah ini di IIS 7.5, dan perbaikan ini bekerja dengan sempurna. Alih-alih menghapus semua konten serververver saya, saya hanya menggabungkan pengaturan yang relevan di atas ke pengaturan saya sendiri.
Keith Walton
38
PERHATIAN : Bagian tajuk khusus dalam kode di atas memungkinkan situs APAPUN untuk memanggil API Anda dari peramban - yang merupakan risiko keamanan besar . Baca di CORS, yang secara efektif memungkinkan header itu.
profMamba
Juga memiliki masalah ini pada iis 7.5 dan ini berhasil. Pastikan untuk membaca pesan Toolkit di atas tentang risiko terlibat dalam membuka kor untuk semua orang. Juga komentarnya naik karena komentar seperti itu sangat berharga.
sjdirect
Saya rasa Anda tidak perlu header kustom sama sekali dalam hal ini. Sisa system.webserverbagian ini sudah cukup - pastikan Anda memiliki nama yang tepat untuk penangan url tanpa ekstensi.
Ivaylo Slavov
1
@niico Anda hanya boleh mengizinkan situs tepercaya ke Access-Control-Allow-Origin dengan kata lain ganti "*" dengan URL situs web Anda. Properti ini adalah daftar putih semua situs tepercaya, kecuali jika Anda ingin mempercayai seluruh web (yang biasanya merupakan ide yang buruk).
profMamba
5

ini bekerja untuk saya di iis8 bersama dengan beberapa jawaban lainnya. Kesalahan saya adalah 404.6 khusus

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>
Sico
sumber
ketika Anda menjalankan AppCmd, inilah yang dimasukkan ke dalam web.Config Anda (kecuali untuk bit applyToWebDAV).
Chase Florell
5

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:

<handlers>
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

        <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
Hari
sumber
4

Aktifkan CORS (bagus dan rapi)

1. Tambahkan paket nuget CORS

Install-Package microsoft.aspnet.webapi.cors

2. pada file WebApiConfig.cs untuk Mendaftar metode tambahkan kode di bawah ini:

config.EnableCors();

mis:
menggunakan System.Web.Http;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

3.Tambahkan kode di bawah ini ke namespace controller termasuk get, post, delete, put, atau metode http apa pun

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

ex:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

referensi: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

zokaee hamid
sumber
4

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

Anshuman Saurabh
sumber
3

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:

[HttpPut]
[DnnAuthorize(StaticRoles = "MyRoleNames")]
public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData)
DBD
sumber
3

Untuk PHP, itu hanya:

  1. Buka IIS
  2. Pergi ke Pemetaan Handler
  3. klik edit pada php5.6.x atau php7.0.x
  4. klik "batasan permintaan"
  5. di bawah tab kata kerja, pilih "salah satu kata kerja berikut" dan tambahkan "DAPATKAN, KEPALA, POST, PUT, PATCH, DELETE, OPTIONS"

Saya membayangkan ini akan bekerja dengan penangan lain juga.

Frank Forte
sumber
2

Selain semua solusi di atas, periksa apakah Anda memiliki " id " atau parameter khusus yang ditentukan dalam metode DELETE cocok dengan konfigurasi rute.

public void Delete(int id)
{
 //some code here
}

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:

public void Delete(string id)
{
 //some code here
}

Catatan: Pastikan juga Anda melewatkan data melalui url bukan metode data yang akan membawa muatan sebagai konten isi.

DELETE http://{url}/{action}/{id}

Contoh:

DELETE http://localhost/item/1

Semoga ini bisa membantu.

Arun
sumber
2

Saya telah menghadapi masalah yang sama dengan Anda, kemudian menyelesaikannya, Ini adalah solusinya, saya berharap ini bisa membantu
Pertama

Dalam IIS modulesConfiguration, loop up WebDAVModule , jika server web Anda memilikinya, kemudian hapus

Kedua

Dalam handler mappingskonfigurasi IIS , Anda dapat melihat daftar penangan yang diaktifkan, untuk memilih the PHP item, mengeditnya, pada halaman edit, klik tombol pembatasan permintaan, lalu pilih the verbs tabdalam modal, di tentukan kata kerja yang akan ditangani label, centang all verbs radio, kemudian klik ok, Anda juga mungkin melihat peringatan, itu menunjukkan kepada kita bahwa menggunakan tanda kutip ganda untuk eksekusi PHP-CGI, lalu lakukan

jika dilakukan, lalu restart server IIS, itu akan baik-baik saja

masukkan deskripsi gambar di sini

Chauncery
sumber
1
Saya hanya menghapus WebDAVModule dari situs web IIS dan itu berhasil bagi saya
Umair Malhi
1

Saya tidak yakin apakah Anda telah mengedit file konfigurasi yang benar. Coba langkah-langkah berikut

  1. buka% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config

  2. Secara default di bawah entri yang diberikan dikomentari dalam file applicationhost.config. batalkan komentar entri ini.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />
vikomall
sumber
4
mengacaukan applicationhost.config? tidak
Toolkit
Orang tidak boleh main-main dengan selain file konfigurasi aplikasi. Pertama-Anda akan melakukan ini untuk seluruh server dan lupa, maka banyak orang akan bertanya-tanya bagaimana cara kerjanya pada mesin ini dan tidak bekerja pada sisanya. Juga, jika Anda tidak diizinkan mengakses file konfigurasi IIS di server tempat aplikasi dihosting, Anda harus menyelesaikannya di web.config. Bayangkan server dev Anda memiliki pembaruan di atas, apakah web.config Anda akurat? Ini adalah cara yang bagus untuk kehilangan hari seseorang dalam menyelidiki mengapa penyebaran produksi telah gagal
Ivaylo Slavov
1

Berikut adalah cara Anda mengizinkan Verb HTTP tambahan menggunakan IUI Manager GUI.

  1. Di IIS Manager, pilih situs yang Anda inginkan untuk PUT atau DELETE.

  2. Klik opsi "Permintaan Pemfilteran". Klik tab "HTTP Verbs".

  3. Klik tautan "Bolehkan Verb ..." di bilah sisi.

  4. Di kotak yang muncul ketik "HAPUS", klik OK.

  5. Klik tautan "Bolehkan Verb ..." di bilah sisi lagi.

  6. Di kotak yang muncul ketik "PUT", klik OK.

Chaoix
sumber
Usaha yang bagus - sesuatu yang berbeda untuk sekali - tetapi masih tidak berhasil!
ozzy432836
Saya telah mencoba semua yang saya lihat disarankan pada SO dan di tempat lain. Saya akhirnya mencoba ini dan itu berhasil dengan sempurna. Dalam kasus saya, kata kerja PUT dan DELETE sudah ada dalam daftar, dan saya harus menghapusnya terlebih dahulu, kemudian menambahkannya kembali menggunakan tautan Bolehkan Verb ..., tetapi tetap saja, itu berhasil ketika tidak ada yang lain. Terima kasih banyak!
JTennessen
1

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 ":

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />
RC Cola
sumber
0

Alasan lain dapat menjadi sebagai berikut:
Saya mengubah metode Url untuk Web Api saya menurut jawaban ini :

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

Tetapi metode ini menciptakan tautan seperti:

/api/MyApiCtrl?action=MyAction

Ini berfungsi dengan benar dengan MENDAPATKAN dan permintaan POST tetapi tidak dengan PUT atau HAPUS.
Jadi saya hanya menggantinya dengan:

/api/MyApiCtrl

dan itu memperbaiki masalah.

Nicolai
sumber
0

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;

  1. Saya pergi ke manajer IIS.
  2. Di panel kiri memilih situs.
  3. Di area kerja sebelah kiri, pilih WebDAV, Buka itu klik ganda.
  4. Di panel paling kanan, nonaktifkan.

Sekarang semuanya berfungsi.

keterampilan kerja
sumber
-1

Anda dapat mengonversi metode Hapus sebagai POST menjadi;

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }
Teoman shipahi
sumber