it-swarm-id.com

Beberapa jenis ditemukan yang cocok dengan pengontrol bernama 'Home'

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 tipe ditemukan yang cocok dengan pengontrol bernama 'Home'. Ini dapat terjadi jika rute yang melayani permintaan ini. ('{controller}/{action}/{id}') tidak menentukan ruang nama untuk dicari untuk pengontrol yang cocok dengan permintaan. 

Jika ini masalahnya, daftarkan rute ini dengan menelepon 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 HomeController lain? Bagaimana saya bisa mengatakannya untuk hanya melihat di folder Controller sebagaimana mestinya?

Fakta:

  1. Tidak menggunakan area. Ini adalah dua proyek yang sama sekali tidak terkait. Saya menempatkan setiap proyek yang diterbitkan ke setiap folder masing-masing. Tidak ada yang mewah.
  2. Setiap proyek hanya memiliki 1 HomeController.

Adakah yang bisa mengkonfirmasi ini masalahnya?

287

Pesan kesalahan ini sering terjadi ketika Anda menggunakan area dan Anda memiliki controller yang sama nama 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:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Controllers" }
);

dan di ~/Areas/Admin/AdminAreaRegistration.cs Anda:

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Areas.Admin.Controllers" }
);

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 menjadi tuan rumah 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.

441
Darin Dimitrov

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 Majelis ASP.NET Anda, yang akan mereproduksi kesalahan ini. 

Solusinya adalah pergi ke folder bin Anda dan hapus dll lama. (Saya mencoba "Rebuild Project", tetapi itu tidak menghapusnya, jadi pastikan untuk memeriksa bin untuk memastikan mereka hilang)

503
Kirk Woll

Di MVC4 & MVC5 Agak sedikit berbeda, gunakan berikut ini 

/App_Start/RouteConfig.cs

namespace MyNamespace
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces:  new[] {"MyNamespace.Controllers"}
            );
        }
    }
}

dan di Area

context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new[] { "MyNamespace.Areas.Admin.Controllers" }
            );
56
Developer

Lihat ini ... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas

Maka gambar ini (harap kamu suka gambar saya)

enter image description here

39
Tom

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 lainTAPIfile keluaran sebelumnya di folder bin masih ada ... Dan sayangnya, menekan Build -> Clean Solution setelah mengganti nama proyek dan Namespaces tidak menghapus mereka ... jadi menghapus mereka memecahkan masalah saya secara manual!

29
Dr TJ

Periksa folder bin jika ada file dll lain yang mungkin memiliki konflik dengan kelas homeController.

22
Amir Shrestha

dalam folder bin/ proyek Anda

pastikan bahwa Anda hanya memiliki PROJECT_PACKAGENAME.DLL

dan hapus ANOTHER_PROJECT_PACKAGENAME.DLL  

yang mungkin muncul di sini secara tidak sengaja atau Anda baru saja mengganti nama proyek Anda

18
Sruit A.Suk

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:

ControllerBuilder.Current
     .DefaultNamespaces.Add("YourApp.Controllers");
14
Ben Foster

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.

7
Mech0z

Meskipun Anda tidak menggunakan area, Anda masih bisa menentukan di RouteMap Anda namespace mana yang akan digunakan 

routes.MapRoute(
    "Default",
    "{controller}/{action}",
    new { controller = "Home", action = "Index" },
    new[] { "NameSpace.OfYour.Controllers" }
);

Tapi sepertinya masalah sebenarnya adalah cara kedua aplikasi Anda diatur di IIS

7
StanK

Mungkin ada kasus lain denganAreasbahkan Anda telah mengikuti semua langkah dalam routing di Area (seperti memberikan Namespace di tabel routing global), yaitu:

Anda mungkin tidak membungkus Pengontrol Global Anda di 'namespace' Anda berikan dalam perutean.

Misalnya:

Selesai ini:

public class HomeController : Controller
{

Dari pada:

namespace GivenNamespace.Controllers
{
   public class HomeController : Controller
   {
6
T Gupta

Anda juga bisa mendapatkan kesalahan 500 jika Anda menambahkan Majelis Anda sendiri yang berisi ApiController dengan mengganti GetAssemblies dari DefaultAssembliesResolver dan sudah ada dalam array dari base.GetAssemblies ()

Inti masalah:

public class MyAssembliesResolver : DefaultAssembliesResolver
{
    public override ICollection<Assembly> GetAssemblies()
    {
        var baseAssemblies = base.GetAssemblies();

        var assemblies = new List<Assembly>(baseAssemblies);

        assemblies.Add(Assembly.GetAssembly(typeof(MyAssembliesResolver)));

        return new List<Assembly>(assemblies);
    }
}

jika kode di atas berada di Majelis yang sama dengan Kontroler Anda, Majelis itu akan berada di daftar dua kali dan akan menghasilkan 500 kesalahan karena Web API tidak tahu mana yang harus digunakan.

6
Allan Elder

jika Anda ingin menyelesaikannya secara otomatis .. Anda dapat menggunakan aplikasi assambly cukup tambahkan kode berikut:

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { string.Format("{0}.Controllers", BuildManager.GetGlobalAsaxType().BaseType.Assembly.GetName().Name) }
        );
5
Xtremexploit

Punya masalah yang sama dan tidak ada yang membantu. Masalahnya adalah saya sebenarnya tidak memiliki duplikat, kesalahan ini muncul setelah beralih namespace proyek dari MyCuteProject ke MyCuteProject.Web

Pada akhirnya saya menyadari bahwa sumber kesalahan adalah file global.asax - markup XML, bukan .cs- codebehind. Periksa namespace di dalamnya - itu membantu saya. 

4
Arman Hayots

saya baru saja menghapus folder 'Bin' dari server dan menyalin bin saya ke server, dan masalah saya terpecahkan.

2
javad hemati

Ini juga dapat terjadi jika Anda memiliki DLL lain di folder bin aplikasi Anda dan bahwa DLL memiliki pengontrol bernama Home tetapi dalam namespace yang berbeda dari HomeController .

Misalnya, jika Anda mengubah nama proyek Anda dan masih memiliki binari dikompilasi dari proyek lama, maka bahkan ketika Anda membersihkan solusi Anda dengan memilih perintah Clean Solution menu, binari lama akan tetap.

Jika ada binari lama yang memiliki nama pengontrol yang sama (yang akan, jika Anda hanya mengubah nama Majelis proyek Anda dan beberapa ruang nama), Anda bisa memiliki masalah ini.

Pastikan Anda menghapus semua rakitan lain dari folder tempat yang Anda tahu tidak perlu.

Berikut ini adalah video demo: https://youtu.be/8Snz2ySTAU8

1
Water Cooler v2

Di Route.config

namespaces: new [] {"Appname.Controllers"}

1
Awais

Beberapa waktu dalam satu aplikasi, Masalah ini juga datang. Dalam hal ini pilih kotak centang ini ketika Anda menerbitkan aplikasi Anda enter image description here

1
Umang Patwa

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

1
VivekDev

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 skenario ini, hapus folderbin

1
Sebastian 506563

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 yang buruk itu, hal mulai terjadi bekerja dengan benar.

1
Hugo

saya menghadapi masalah yang sama. dan alasan utama adalah bahwa saya memiliki pengontrol yang sama di dua Area berbeda. Setelah saya menghapus salah satu dari mereka itu berfungsi dengan baik. 

saya memilikinya akan membantu Anda.

 Project Solution

0

Saya memiliki dua Proyek dalam satu Solusi dengan Nama Pengontrol yang Sama. I Menghapus Referensi Proyek kedua di Proyek pertama dan Masalah Terselesaikan 

0
Kashif Faraz

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 controller bernama FileUpload.

0
user1017882

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.

0
Curtis White

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. 

0
AnthonyJ