Saya melakukan layanan web ASP.NET MVC 3 dan saya terus mendapatkan pengecualian ini sesekali.
Jejak tumpukan:
Server Error in '/' Application.
A route named 'ListTables' is already in the route collection. Route names must be unique.
Parameter name: name
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: A route named 'ListTables' is already in the route collection. Route names must be unique.
Parameter name: name
Source Error:
Line 24: // }
Line 25: // );
Line 26: context.MapRoute(
Line 27: "ListTables",
Line 28: // example:
Source File: C:\inetpub\wwwroot\SchemaBrowserService\Website\Areas\Api\ApiAreaRegistration.cs Line: 26
Stack Trace:
[ArgumentException: A route named 'ListTables' is already in the route collection. Route names must be unique.
Parameter name: name]
System.Web.Routing.RouteCollection.Add(String name, RouteBase item) +2329682
System.Web.Mvc.RouteCollectionExtensions.MapRoute(RouteCollection routes, String name, String url, Object defaults, Object constraints, String[] namespaces) +236
System.Web.Mvc.AreaRegistrationContext.MapRoute(String name, String url, Object defaults, Object constraints, String[] namespaces) +59
System.Web.Mvc.AreaRegistrationContext.MapRoute(String name, String url, Object defaults) +17
SchemaBrowserService.Areas.Api.ApiAreaRegistration.RegisterArea(AreaRegistrationContext context) in C:\inetpub\wwwroot\SchemaBrowserService\Website\Areas\Api\ApiAreaRegistration.cs:26
System.Web.Mvc.AreaRegistration.CreateContextAndRegister(RouteCollection routes, Object state) +105
System.Web.Mvc.AreaRegistration.RegisterAllAreas(RouteCollection routes, IBuildManager buildManager, Object state) +199
System.Web.Mvc.AreaRegistration.RegisterAllAreas(Object state) +45
System.Web.Mvc.AreaRegistration.RegisterAllAreas() +6
Website.MvcApplication.Application_Start() in C:\Users\djackson\Downloads\RestApiMvc3\Website\Website\Global.asax.cs:35
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272
Ini mungkin terkait dengan fakta bahwa Route Debugger menunjukkan bahwa saya memiliki beberapa rute lama yang telah saya ubah atau hapus dan tidak akan hilang (bahkan setelah me-reboot mesin saya). Pelacakan tumpukan juga mengacu pada file sumber yang telah lama dihapus dan aplikasi saya telah dipindahkan ke lokasi baru, dibersihkan dan dibangun kembali sejak saat itu. Apa yang saya lewatkan?
Ini semua kode registrasi rute saya:
// in Global.asax.cs:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default2", // Route name
"Api/{controller}/{action}/{id}", // URL with parameters
new { controller = "DataSource", action = "Index", area = "Api", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
// in ApiAreaRegistration.cs:
public class ApiAreaRegistration : AreaRegistration
{
public override string AreaName { get { return "Api"; } }
public override void RegisterArea(AreaRegistrationContext context)
{
// DataSources
// Tables
context.MapRoute(
"ListTables",
// example:
// /api/DataSources/DataSource/1/schemata/schema/dbo/tables
"Api/DataSources/DataSource/{dataSourceId}/schemata/{schemaName}/tables",
new
{
controller = "Tables",
action = "TableList",
schemaName = "dbo",
dataSourceId = "DefaultId"
}
);
// Schemata
context.MapRoute(
"Schema",
// example:
// /api/DataSources/DataSource/1/schemata/schema/dbo
"Api/DataSources/DataSource/{dataSourceId}/schemata/{schemaName}",
new
{
controller = "Schema",
action = "Schema",
dataSourceId = "DefaultId",
schemaName = UrlParameter.Optional
}
);
// // DataSources
context.MapRoute(
"SingleDataSource",
"Api/DataSources/DataSource/{dataSourceId}",
new
{
controller = "DataSource",
action = "DataSource",
dataSourceId = UrlParameter.Optional
}
);
context.MapRoute(
"ListDataSources",
"Api/DataSources",
new
{
controller = "DataSource",
action = "DataSourceList",
dataSourceId = "DefaultId"
}
);
context.MapRoute(
"Api_default",
"Api/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
Jawaban:
Untuk memperbaiki masalah ini saya harus masuk ke folder bin di proyek saya, menghapus semua file DLL dan kemudian membangun kembali dan ini memperbaiki masalah.
sumber
bin
folder.Kesalahan ini dapat terjadi karena beberapa penyebab, saya memiliki kesalahan yang sama dan mengatasinya dengan memodifikasi kelas Global.asax.
Metode Application_Start di Global.asax.cs seperti:
Baris berikut muncul dua kali dalam metode ini:
Ini memastikan bahwa rute tersebut dua kali ditambahkan ke daftar rute dan pada saat yang sama menyebabkan kesalahan.
Saya mengubah metode Application_Start sebagai berikut dan kesalahan menghilang:
Ini mungkin bukan jawaban untuk masalah Anda, tetapi mungkin dapat membantu orang lain di masa depan. Saya tidak melihat jawaban ini di antara yang lain, jadi saya memutuskan untuk menambahkan ini.
sumber
Saya menemukan bahwa Global.asax merujuk ke versi lama file DLL situs sebelum saya mengganti namanya. DLL tidak sedang dibersihkan ketika saya melakukan Build> Clean up karena proyek / solusi VS tidak merujuknya lagi. Tampaknya terkadang hanya versi DLL yang lebih baru yang digunakan, yang memungkinkan situs bekerja dengan benar, tetapi pada akhirnya keduanya akan dimuat yang menyebabkan konflik rute.
sumber
Rute dimuat dari semua rakitan dalam AppDomain.CurrentDomain, jadi jika rakitan lama Anda masih menjadi bagian dari itu, Anda mungkin masih mendapatkan rute lama / duplikat.
sumber
Dalam kasus saya, saya menghadapi masalah ini, ketika saya menambahkan referensi ke proyek lain dari solusi, yang juga MVC dan menggunakan nama yang sama di area (saya tidak ingin menambahkan proyek ini, saya tidak tahu bagaimana itu terjadi ). Ketika saya menghapus DLL ini, proyek mulai bekerja.
sumber
Menghapus DLL saja tidak berhasil untuk saya (di VS2013), tetapi menghapus seluruh folder 'bin' dan 'obj' dan kemudian membangun solusi bekerja dengan sempurna! Membuat saya berharap saya tidak menghabiskan waktu lama untuk memperbaikinya ...
sumber
Tidak ada saran yang berhasil untuk saya. Pergi ke depan dan restart server web (IIS dalam kasus ini) dan itu menghapus kesalahan setelah saya memperbaiki kode. DLL harus telah di-cache di IIS.
sumber
coba kode ini, hanya ganti nama
sumber
Saya mendapatkan kesalahan yang sama. Tapi akhirnya saya punya solusi. Skenario: Saya menambahkan dll yang berbeda (aplikasi mvc4) di aplikasi mvc4 api web saya. Saat mencoba lari. Saya mendapatkan kesalahan yang sama. Akar Penyebab- Ketika aplikasi api web saya berjalan. Aplikasi mendaftarkan semua area dari diri sendiri dan mulai memuat ke referensi dll domain aplikasi saat ini. Saat aplikasi memuat dll (aplikasi MVC4) saat itu mendapatkan error karena maproute saat ini sudah menambahkan key untuk "HelpPage_Default".
Larutan. 1. Ubah kunci RegisterArea di maproute baik aplikasi saat ini atau aplikasi yang sudah ada (Lihat dll). 2. Pindahkan kode dll (aplikasi mvc4) ke bebas yang berbeda dan lihat dll baru.
sumber
Saya menelepon secara manual
AttributeRoutingHttpConfig.Start()
di Global.asax saya. Tidak memperhatikan baris yang dibuat secara otomatis di bagian atas file yang secara otomatis memanggilnya.sumber
Saya memiliki aplikasi yang merupakan aplikasi Formulir yang dimigrasikan ke MVC dengan komponen pihak ketiga yang digunakan untuk otentikasi yang dialihkan ke situs lain. Komponen akan memulai sesi dua kali jika pengguna belum masuk (sekali untuk koneksi awal ke situs dan sekali untuk kembali). Jadi saya menyelesaikan ini dengan kode berikut:
sumber
Menghapus dll di folder bin berhasil 100%, saya masih memiliki dll proyek saya yang perlu dibangun kembali. Melainkan membuat salinan folder bin. kemudian hapus proyek asli.rebuild. jika gagal, tempatkan dll yang hilang ke dalam folder bin.
sumber
Saya menjalankan situs web MVC2 lama dan saya mendapat masalah ini karena 'Managed Pipeline Mode' IIS diatur ke 'Terintegrasi' secara default (tekan F4 pada proyek). Mengubahnya menjadi 'Klasik' memperbaiki masalah
sumber
Saat menerbitkan ke Layanan Aplikasi Azure, saya harus memeriksa "Pengaturan" Dialog Publikasikan -> "Opsi Penerbitan File" -> "Hapus file tambahan di tujuan" untuk menghapus file DLL dan simbol proyek lama. Kemudian situs tersebut akan dimuat.
Ini pada dasarnya adalah solusi jawaban saat ini (Fleas) di intinya. Hapus DLL yang melanggar.
Apa yang menyebabkan DLL lama ini dipertahankan adalah saya memuat versi lama situs web (templat MVC 3 ~ 5 tetapi proyek web yang berbeda dengan ruang nama yang bertabrakan, karena versi yang lebih baru adalah salinan dari proyek ini yang dibuat beberapa poin di masa lalu. ) DLL proyek yang lebih baru hanya perlu dihapus. Ada berbagai cara untuk mencapai ini. Saya menemukan menggunakan dialog sebagai atm termudah. Masuk ke sistem file dan menghapus file dengan tangan pasti berfungsi juga.
sumber