Saya memiliki aplikasi Web Api. Ini bekerja dengan sangat baik ketika saya mengujinya menggunakan server dev debugging VS 2010. Tapi sekarang saya menerapkannya ke IIS 7.5 dan saya mendapatkan kesalahan HTTP 404 saat mencoba mengakses aplikasi.
Ini web.config saya
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-FlowGearProxy-20123141219;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="true" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
Jawaban:
Saya juga berjuang dengan ini. Untungnya, Steve Michelotti mendokumentasikan solusi yang berhasil untuk saya di sini .
Pada akhirnya, saya mengaktifkan semua kata kerja (verb = "*") ke penangan ExtensionlessUrlHandler-Integrated-4.0 di konfigurasi web saya.
Yang lain menunjukkan bahwa mengaktifkan WebDAV menyebabkan masalah. Untungnya, saya tidak mengalami masalah itu juga.
sumber
*
. Saya harus mengubah jalur untuk*
membuatnya berfungsi karena*.
masih menyebabkan masalahPunya masalah yang sama. Pengaturan konfigurasi ini menyelesaikan masalah.
Seperti dijelaskan dalam http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html solusi di atas harus dihindari. Gunakan ini sebagai gantinya. Solusi yang sama juga disediakan oleh Lopsided. Simpan di sini agar pengguna menghindari penerapan solusi kerja pertama.
sumber
Jika IIS diinstal atau diaktifkan setelah ASP.NET, Anda harus mendaftar ASP.NET secara manual dengan IIS agar aplikasi .NET Anda berfungsi.
Untuk Windows 7 dan sebelumnya:
Untuk Windows 8 dan lebih baru:
sumber
Apakah Anda menjalankan aplikasi API Web dalam direktori virtual atau aplikasi?
Misalnya: Saya memiliki masalah yang sama ketika saya memindahkan proyek saya ke IIS lokal saya di bawah Situs Web Default> SampleWebAPI. Saya yakin ini karena perubahan dalam
URL
perutean sebagai berikut:Asli:
localhost:3092/api/values
Pindah:
localhost/SampleWebAPI/api/values
Jika Anda memindahkan proyek API Web ke situs webnya sendiri yang berjalan pada port berbeda, tampaknya itu berfungsi.
Catatan tambahan: Saya telah memperumit masalah ini dengan menambahkan
api
sebagai alias dari aplikasi dalam situs web saya yang menyebabkan efektifnyaURL
menjadi:localhost:81/api/api/values
- perhatikan ini setelah memindahkan situs web ke situs webnya sendiriOleh karena itu, karena saya ingin mempertahankan pemisahan antara situs web saya dan situs proyek mvc api web, saya mengubah aturan perutean
global.asax
untuk Web API "DefaultAPI" dariapi/{controller}/{id}
ke{controller}/{id}
dan ASP.NET MVCDefault
dari{controller}/{id}
keinfo/{controller}/{id}
.sumber
IIS
sebagaiapi
juga. Ini menyebabkan semua uji coba dan kesalahan debugging ini selama lebih dari 2 jam. Terima kasih banyak telah membagikan pengalaman Anda! Berganti nama dan sekarang saya kembali ke bisnis lagi. : DIni adalah satu-satunya jawaban yang berhasil untuk saya ...
Saya memiliki masalah serupa ... Sepertinya apa pun yang saya lakukan, tidak ada yang dialihkan dan file global saya diabaikan begitu saja. Saya serius mempertimbangkan untuk mengakhiri semuanya sebelum saya menemukan jawaban ini. Saya harap tautan ini membantu orang lain.
Menambahkan yang berikut ke file web.config berhasil untuk saya:
Tag system.webServer sudah ada di sana tentu saja tetapi saya menambahkan tag modul ke sana dan kemudian menghapus & menambahkan tag ke tag modul.
sumber
Beberapa hal yang perlu diperiksa:
sumber
Saya memiliki masalah serupa. Saya memiliki pengaturan yang tepat di file web.config saya tetapi menjalankan kumpulan aplikasi dalam mode Klasik daripada mode Terpadu
sumber
Masalah ini juga bisa terjadi karena hal berikut
1. Di Web.Config
2. Pastikan yang berikut ini tersedia di folder bin di server tempat API Web digunakan
System.Net.Http
System.Net.Http.Formatting
System.Web.Http.WebHost
System.Web.Http
Rakitan ini tidak akan disalin di folder bin secara default jika terbitkan melalui Visual Studio karena paket API Web diinstal melalui Nuget di mesin pengembangan. Masih jika Anda ingin membuat file-file ini tersedia sebagai bagian dari publikasi Visual Studio maka Anda perlu mengatur CopyLocal ke True untuk Majelis ini
Sadish Kumar.V
sumber
Berdasarkan ini jawaban SO , aku hanya harus perubahan
path="*."
untukpath="*"
untuk menambahkanExtensionlessUrlHandler-Integrated-4.0
diconfiguration>system.WebServer>handlers
dalam sayaweb.config
Sebelum:
Setelah:
sumber
Saya juga mengalami masalah ini. Saya memecahkan masalah dengan membuka Application Pools> Application Pool Name dan mengubah .NET Framework dari versi v.2.0.50727 menjadi v4.0.30319.
sumber
Saya harus menonaktifkan Opsi Penerbitan File "Prekompilasi selama penerbitan."
sumber
Ada perbaikan resmi dari microsoft: http://support.microsoft.com/kb/980368
Saya sangat TIDAK menyarankan untuk menggunakan <modules runAllManagedModulesForAllRequests = "true">. Ini mengarahkan semua permintaan (bahkan .jpg, .css, .pdf, dll) akan diproses oleh semua modul HTTP yang terdaftar. Ada dua momen negatif: a) beban tambahan pada sumber daya perangkat keras; b) potensi kesalahan, karena modul http akan memproses jenis konten baru.
sumber
Saya mulai mendapatkan tanggapan 404 dari API Web setelah mengikuti tutorial Windows Azure yang meminta saya untuk menambahkan file "WebRole.cs" ke proyek saya.
Setelah menghapus "WebRole.cs" dari proyek saya, panggilan API Web saya mulai berfungsi kembali.
sumber
Pastikan pool aplikasi dalam mode Terpadu
Dan tambahkan yang berikut ini ke file web.config:
sumber
Dalam kasus saya, masalahnya hanya karena saya mencoba mengakses situs di
myserver.myintranet.com/mysite
Tetapi situs web yang mengikat http di IIS tidak memiliki nama host yang ditentukan dalam pengikatan. Itu telah berhasil sebelumnya dan saya tidak tahu bagaimana itu bisa meledak.
Setelah saya memasukkan
myserver.myintranet.com
nama host, 404 itu hilang.Di Manajer IIS Anda masuk ke Bindings ... di panel tindakan, lalu edit pengikatan http untuk menentukan nama host.
sumber
Jangan lupa untuk menerapkan global.asax
sumber
Memiliki masalah yang sama, respons 404 untuk pengontrol api web saat disajikan dari IIS tetapi semuanya berfungsi dengan baik dari VS2010. Tidak ada solusi di atas yang berhasil untuk saya. Akhirnya saya menemukan bahwa masalahnya adalah kami menambahkan dukungan WSE 3.0 untuk aplikasi dan dll Microsoft.Web.Services3 hilang di direktori aplikasi / bin. Aneh, tetapi setelah menyalin dll, pemetaan rute mulai berfungsi.
sumber
Bagi saya masalahnya adalah situs root dikonfigurasi untuk menggunakan kumpulan aplikasi .NET 2.0, dan aplikasi saya di dalam situs itu adalah .NET 4.5.
Saya membuat situs baru dengan kumpulan aplikasi .NET 4 dan menempatkan aplikasi saya di root itu - dan itu berfungsi dengan baik.
sumber
Saya juga berjuang dengan ini. Masalah sebenarnya saya adalah bahwa saya memiliki Layanan Web ASMX yang, ketika saya memasukkan parameter ke dalam metode web dan mengujinya, maka itu akan memberi saya 404. Metode tertentu telah bekerja dengan baik di masa lalu dan tidak diubah, hanya diterbitkan ulang. Kemudian saya sampai di sini dan mencoba semua jawaban yang diposting & tidak ada yang membantu.
Solusi utama saya? Saya tahu ini drastis, tetapi saya baru saja membuat solusi Visual Studio dan proyek web baru. Pilih MVC, lalu saya melakukan "Add"> "New Item", memilih "Visual C #"> "Web" dan "Web Service (ASMX)" di bawahnya. Saya menyalin semua kode di belakang kode lama saya, lalu saya mencatat namespace yang diberikan file baru di proyek baru saya, lalu menempelkan semua kode lama saya ke file di belakang kode baru di proyek baru dan meletakkan namespace kembali seperti semula.
Kemudian saya membuat folder saya di proyek saya yang saya miliki sebelumnya menggunakan Visual Studio untuk melakukan "Add"> "New Folder", lalu menyalin kembali file saya ke dalam folder dari proyek saya yang lain menggunakan Windows Explorer, lalu mengklik kanan setiap folder di Visual Studio dan melakukan "Add"> "Existing Item ..." dan menarik item dalam folder tersebut ke folder Visual Studio proyek baru saya. Saya mereferensikan semua rakitan .NET saya lagi, setelah kedua proyek terbuka sehingga saya dapat membandingkan mana yang telah saya referensikan, sebelumnya (ada beberapa). Saya harus memberi nama proyek baru saya sedikit berbeda - pada dasarnya saya melakukan sesuatu yang sebanding dengan "GeneralWebApp" daripada "MyWebApp", misalnya - jadi saya harus melakukan "Ganti Semua" di seluruh solusi saya untuk mengganti nama itu,
Kemudian saya melakukan "Rebuild All" pada proyek tersebut, kemudian memulainya dengan tombol "Play" yang diberikan Visual Studio ketika saya mendapatkannya untuk membangun dengan benar. Ini bekerja dengan baik. Jadi saya menerbitkannya, dan semuanya baik-baik saja di server tempat saya menerbitkannya, ketika saya menjalankannya dari sana. Saya tidak punya penjelasan tentang apa yang terjadi, tapi begitulah cara saya melewatinya. Ini bukan tes yang buruk hanya untuk melihat apakah sesuatu yang dilakukan Visual Studio telah mengacaukannya.
sumber
Jika Anda hanya menempatkan folder bin di IIS (setelah membangun proyek), masalah ini juga akan terjadi. Dalam situasi ini, Anda harus menerbitkan proyek menggunakan VisualStudio, kemudian tempatkan folder yang diterbitkan ke IIS.
sumber
Jenis permintaan HTTP apa yang Anda buat?
Ini adalah jawaban yang agak kiri tetapi sudahkah Anda mencoba menghapus halaman kesalahan default IIS untuk 404 untuk memeriksa apa yang sebenarnya dihasilkan oleh API Anda?
Saya memiliki masalah di mana saya menginginkan metode pengontrol untuk mengembalikan 404 ketika saya mem-posting id yang salah ke sana. Saya menemukan bahwa saya selalu mendapatkan halaman IIS 404 "File atau direktori tidak ditemukan" daripada respon HTTP dari API saya. Menghapus halaman kesalahan 404 default menyelesaikan masalah.
Masalah yang berbeda tetapi Anda tidak pernah tahu itu dapat membantu;)
sumber
Bagian konfigurasi di file web.config ini dapat membantu seperti yang membantu saya: di bagian system.webServer:
sumber
Saya baru-baru ini mengalami kesalahan 404 tidak ditemukan dengan semua rute / pengontrol Api Web 2 saya. Jadi saya pergi ke server sebenarnya dan mencoba menjelajah menggunakan localhost alih-alih nama host dan mendapatkan "404.7 Not Found - Modul pemfilteran permintaan dikonfigurasi untuk menolak ekstensi file".
Posting SO ini membantu saya menyelesaikannya.
sumber
Itu teratasi untuk saya, ketika saya mengaktifkan kotak centang untuk UrlRoutingModule-4.0:
IIS Manager> Modules> pilih UrlRoutingModule-4.0> Edit Module> centang kotak centang "Panggil hanya untuk permintaan ke aplikasi ASP.NET atau penangan yang dikelola".
sumber
Saya memiliki masalah yang sama: pada mesin yang baru diinstal dengan Visual Studio 2013, proyek api web bekerja di bawah IISExpress, tetapi tidak di bawah IIS lokal. Saya mencoba semua yang bisa saya temukan, tetapi pada akhirnya masalahnya tidak perlu dengan API Web, tetapi dengan MVC: meskipun sudah diinstal, tidak ada proyek MVC yang berjalan.
Apa yang berhasil bagi saya adalah menghapus IIS (dari TAMBAH / HAPUS Fitur Windows), lalu instal ulang, lalu jalankan aspnet_regiis -i. Mungkin ini membantu orang lain.
sumber
Saya menghabiskan banyak waktu mencoba banyak hal untuk akhirnya menyadari bahwa saya menambahkan aplikasi web saya bukan di Situs / Situs Web Default, tetapi di situs web lain yang terikat ke port lain. Jelas mencoba localhost pada port 80 akan memberikan 404.
sumber
saya tidak melakukan apa-apa, cukup tambahkan tag ini di web.config, yang berfungsi masalah ini muncul di salah satu poin berikut
Gunakan Web Api dalam proyek yang sama menggunakan bentuk MVC atau asp.net
Gunakan RouteConfig dan WebApiConfig di Global.asax sebagai GlobalConfiguration.Configure (WebApiConfig.Register); RouteConfig.RegisterRoutes (RouteTable.Routes);
Gunakan RouteConfig untuk 2 tujuan, bentuk asp.net menggunakan dengan friendlyurl dan mvc routing untuk routing MVC
kami hanya menggunakan tag ini di web.config, itu akan berfungsi.
sumber
Mengalami masalah yang sama dengan Web API dan .Net Core Web API. Berfungsi dengan baik di VS 2017 saat men-debug, tetapi mengembalikan 404 saat dipublikasikan ke IIS 7.5. Solusi bagi saya adalah mengubah cara saya membuat situs. Alih-alih menerbitkan ke root Situs Web (dibuat dengan mengklik kanan Situs ... Tambahkan Situs Web), saya harus membuat Aplikasi (dibuat dengan mengklik kanan Situs Web ... Tambahkan Aplikasi) dan menerbitkan ke folder itu. Perhatikan bahwa untuk versi Inti, saya harus mengubah pengaturan Versi Application Pool .NET Framework ke "No Managed Code".
sumber
Bagi saya solusinya adalah menghapus baris berikut dari file web.config saya:
Saya perhatikan bahwa VS telah menambahkannya secara otomatis, tidak yakin mengapa
sumber
Coba webconfg ini .. ganti "NewsApi.dll" dengan dll utama Anda!
sumber