Saat ini saya memiliki dua proyek MVC3 yang tidak terkait yang diselenggarakan secara online.
Satu berfungsi dengan baik, yang lain tidak berfungsi, memberi saya kesalahan:
Beberapa jenis ditemukan yang cocok dengan pengontrol yang bernama 'Rumah'. Ini dapat terjadi jika rute yang melayani permintaan ini ('{controller} / {action} / {id}') tidak menentukan ruang nama untuk mencari controller yang cocok dengan permintaan.
Jika ini masalahnya, daftarkan rute ini dengan memanggil kelebihan metode 'MapRoute' yang mengambil parameter 'namespaces'.
Cara kerja hoster saya adalah dia memberi saya akses FTP dan di folder itu saya punya dua folder lain, satu untuk masing-masing aplikasi saya.
ftpFolderA2 / foo.com
ftpFolderA2 / bar.com
foo.com berfungsi dengan baik, saya menerbitkan aplikasi saya ke sistem file lokal saya kemudian FTP isinya dan berfungsi.
Ketika saya mengunggah dan mencoba menjalankan bar.com, masalah di atas menyala dan mencegah saya menggunakan situs saya. Semua sementara foo.com masih berfungsi .
Apakah bar.com mencari dari pengontrol DI MANA SAJA di dalam ftpFolderA2 dan itulah mengapa ia mencari yang lain HomeController
? Bagaimana saya bisa mengatakannya untuk hanya melihat di folder Controller sebagaimana mestinya?
Fakta:
- Tidak menggunakan area. Ini adalah dua proyek yang sama sekali tidak terkait. Saya menempatkan setiap proyek yang diterbitkan ke masing-masing folder masing-masing. Tidak ada yang mewah.
- Setiap proyek hanya memiliki 1 HomeController.
Adakah yang bisa mengkonfirmasi ini masalahnya?
sumber
Jawaban:
Pesan kesalahan ini sering terjadi ketika Anda menggunakan area dan Anda memiliki nama pengontrol yang sama di dalam area dan root. Misalnya, Anda memiliki keduanya:
~/Controllers/HomeController.cs
~/Areas/Admin/Controllers/HomeController.cs
Untuk mengatasi masalah ini (seperti pesan kesalahan menyarankan Anda), Anda bisa menggunakan ruang nama saat mendeklarasikan rute Anda. Jadi dalam definisi rute utama di
Global.asax
:dan di Anda
~/Areas/Admin/AdminAreaRegistration.cs
:Jika Anda tidak menggunakan area, tampaknya kedua aplikasi Anda di-host di dalam aplikasi ASP.NET yang sama dan konflik terjadi karena Anda memiliki pengontrol yang sama didefinisikan dalam ruang nama yang berbeda. Anda harus mengkonfigurasi IIS untuk menampung keduanya sebagai aplikasi ASP.NET terpisah jika Anda ingin menghindari konflik semacam itu. Tanyakan penyedia hosting Anda untuk ini jika Anda tidak memiliki akses ke server.
sumber
Berikut adalah skenario lain di mana Anda mungkin menghadapi kesalahan ini. Jika Anda mengubah nama proyek Anda sehingga nama file majelis berubah, Anda mungkin memiliki dua versi perakitan ASP.NET, yang akan mereproduksi kesalahan ini.
Solusinya adalah pergi ke
bin
folder Anda dan menghapus dll lama. (Saya mencoba "Rebuild Project", tetapi itu tidak menghapusnya, jadi pastikan untuk memeriksabin
untuk memastikan mereka sudah pergi)sumber
Di MVC4 & MVC5 Agak sedikit berbeda, gunakan berikut ini
/App_Start/RouteConfig.cs
dan di Area
sumber
Tonton ini ... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas
Maka gambar ini (harap kamu suka gambar saya)
sumber
Apa yang orang lain katakan benar tetapi bagi mereka yang masih menghadapi masalah yang sama:
Dalam kasus saya itu terjadi karena saya menyalin proyek lain dan menamainya menjadi sesuatu yang lain TETAPI file output sebelumnya di
bin
folder masih ada ... Dan sayangnya, memukulBuild -> Clean Solution
setelah mengganti nama menjadi proyek danNamespaces
itu tidak menghapusnya ... jadi menghapusnya secara manual memecahkan masalah saya!sumber
dalam
bin/
folder proyek Andapastikan Anda hanya memiliki PROJECT_PACKAGENAME.DLL Anda
dan hapus ANOTHER_PROJECT_PACKAGENAME.DLL
yang mungkin muncul di sini karena kesalahan atau Anda hanya mengganti nama proyek Anda
sumber
Periksa folder bin jika ada file dll lain yang mungkin memiliki konflik dengan kelas homeController.
sumber
Solusi lain adalah mendaftarkan namespace default dengan ControllerBuilder. Karena kami memiliki banyak rute dalam aplikasi utama kami dan hanya satu rute generik di wilayah kami (di mana kami telah menentukan namespace), kami menemukan ini menjadi solusi termudah:
sumber
Meskipun Anda tidak menggunakan area, Anda masih bisa menentukan di RouteMap Anda namespace mana yang akan digunakan
Tapi sepertinya masalah sebenarnya adalah cara kedua aplikasi Anda diatur di IIS
sumber
Saya baru saja mengalami masalah ini, tetapi hanya ketika saya menerbitkan ke situs web saya, pada debug lokal saya, itu berjalan dengan baik. Saya menemukan saya harus menggunakan FTP dari hosting saya dan masuk ke direktori publish saya dan menghapus file di folder BIN, menghapusnya secara lokal tidak melakukan apa-apa ketika saya menerbitkan.
sumber
Mungkin ada kasus lain dengan Area bahkan Anda telah mengikuti semua langkah dalam routing di Area (seperti memberikan Namespace dalam tabel routing global), yaitu:
Misalnya:
Selesai ini:
Dari pada:
sumber
Anda juga bisa mendapatkan kesalahan 500 jika Anda menambahkan rakitan Anda sendiri yang berisi ApiController dengan mengesampingkan GetAssemblies dari DefaultAssembliesResolver dan sudah ada dalam array dari base.GetAssemblies ()
Inti masalah:
jika kode di atas berada di rakitan yang sama dengan Controller Anda, rakitan itu akan ada dalam daftar dua kali dan akan menghasilkan 500 kesalahan karena Web API tidak tahu mana yang harus digunakan.
sumber
jika Anda ingin menyelesaikannya secara otomatis .. Anda dapat menggunakan aplikasi ini dengan mudah tambahkan saja kode berikut:
sumber
Punya masalah yang sama dan tidak ada yang membantu. Masalahnya adalah bahwa saya sebenarnya tidak memiliki duplikat, kesalahan ini muncul setelah beralih dari namespace proyek
MyCuteProject
keMyCuteProject.Web
.Pada akhirnya saya menyadari bahwa sumber kesalahan adalah
global.asax
file - markup XML, bukan.cs
-codebehind. Periksa namespace di dalamnya - itu membantu saya.sumber
Saya baru saja menghapus folder 'Bin' dari server dan menyalin bin saya ke server, dan masalah saya terpecahkan.
sumber
Di Route.config
namespaces: new [] {"Appname.Controllers"}
sumber
Kami menemukan bahwa kami mendapatkan kesalahan ini ketika ada konflik dalam bangunan kami yang muncul sebagai peringatan.
Kami tidak mendapatkan detail sampai kami meningkatkan Visual Studio -> Alat -> Pilihan -> Proyek dan Solusi -> Bangun dan Jalankan -> Proyek MSBuild membangun verbositas keluaran menjadi Detail.
Proyek kami adalah aplikasi web .net v4 dan ada konflik antara System.Net.Http (v2.0.0.0) dan System.Net.Http (v4.0.0.0). Proyek kami mereferensikan versi v2 file dari sebuah paket (termasuk menggunakan nuget). Ketika kami menghapus referensi dan menambahkan referensi ke versi v4 maka build berhasil (tanpa peringatan) dan kesalahan diperbaiki.
sumber
Variasi lain dari kesalahan ini adalah ketika Anda menggunakan resharper dan Anda menggunakan beberapa opsi refactor "otomatis" yang mencakup penggantian nama namespace. Inilah yang terjadi pada saya. Untuk mengatasi masalah dengan folder penghapusan skenario semacam ini
bin
sumber
Klik kanan proyek dan pilih bersihkan proyek. Atau yang lain benar-benar mengosongkan direktori bin dan kemudian membangun kembali. Ini harus menghapus semua rakitan yang tersisa dari bangunan sebelumnya
sumber
Beberapa waktu dalam satu aplikasi, Masalah ini juga datang. Dalam hal ini pilih kotak centang ini ketika Anda menerbitkan aplikasi Anda
sumber
Jika itu bisa membantu yang lain, saya juga menghadapi kesalahan ini. Masalahnya disebabkan oleh referensi yang salah di situs web saya. Untuk alasan yang tidak diketahui situs web saya merujuk situs web lain, dalam solusi yang sama. Dan begitu saya menghapus referensi buruk itu, semuanya mulai bekerja dengan baik.
sumber
Jika Anda bekerja di Episerver, atau CMS berbasis MVC lain, Anda mungkin menemukan bahwa nama pengontrol tertentu telah diklaim.
Ini terjadi pada saya ketika mencoba membuat pengontrol yang disebut
FileUpload
.sumber
saya menghadapi masalah yang sama. dan alasan utama adalah bahwa saya memiliki pengontrol yang sama di dua Area yang berbeda. setelah saya menghapus salah satu dari mereka itu berfungsi dengan baik.
saya memilikinya akan membantu Anda.
sumber
Saya memiliki dua Proyek dalam satu Solusi dengan Nama Pengontrol yang Sama. I Menghapus Referensi Proyek kedua dalam Proyek pertama dan Masalah Terselesaikan
sumber
Saya telah menemukan kesalahan ini dapat terjadi dengan situs web ASP.NET tradisional ketika Anda membuat Controller di direktori non App_Code (kadang-kadang Visual Studio mencegah ini).
Ini menetapkan jenis file ke "Kompilasi" sedangkan kode apa pun yang ditambahkan ke "App_Code" diatur ke "Konten". Jika Anda menyalin atau memindahkan file ke App_Code maka file itu masih ditetapkan sebagai "Kompilasi".
Saya curiga ada hubungannya dengan operasi Proyek Situs Web karena proyek situs web tidak memiliki operasi pembangunan. Membersihkan folder tempat sampah dan mengubah ke "Konten" tampaknya memperbaikinya.
sumber