"X" নামের একটি রুট ইতিমধ্যে রুট সংগ্রহের মধ্যে রয়েছে। রুটের নাম অবশ্যই অনন্য হতে হবে। এএসপি.নেট এমভিসি 3 সহ ব্যতিক্রম


98

আমি একটি এএসপি.নেট এমভিসি 3 ওয়েব পরিষেবা করছি এবং আমি মাঝে মাঝে এই ব্যতিক্রম পাচ্ছি।

স্ট্যাক ট্রেস:

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

এটি সম্ভবত এই সত্যের সাথে সম্পর্কিত যে রুট ডিবাগারটি দেখায় যে আমার কিছু পুরানো রুট রয়েছে যা আমি সংশোধন করেছি বা মুছে ফেলেছি এবং যাব না (এমনকি আমার মেশিনটি রিবুট করার পরেও)। স্ট্যাক ট্রেসটি এমন একটি উত্স ফাইলকেও বোঝায় যা দীর্ঘকাল থেকে মুছে ফেলা হয়েছে এবং আমার অ্যাপটি একটি নতুন অবস্থানে সরিয়ে নিয়েছে, তখন থেকে পরিষ্কার করে আবার পুনর্নির্মাণ করা হয়েছে। আমি কী মিস করছি?

এখানে আমার সমস্ত রুট রেজিস্ট্রেশন কোড রয়েছে:

// 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 }
        );

    }
}

আপনি সংজ্ঞায়িত রুটগুলির অন্য কোনও জায়গা আছে? অঞ্চলগুলি?
শিজু

আমি স্ট্যাক ট্রেস যুক্ত করেছি এবং আমার রুটগুলি সম্পর্কে অতিরিক্ত তথ্য যুক্ত করেছি।
Rn222

উত্তর:


297

এই সমস্যাটি সমাধান করার জন্য আমাকে আমার প্রকল্পের বিন ফোল্ডারে যেতে হয়েছিল, সমস্ত ডিএলএল ফাইলগুলি মুছুন এবং তারপরে পুনর্নির্মাণ এবং এটি সমস্যার সমাধান করেছে।


11
কেবল সমাধানটি পরিষ্কার করে আমরা একই কাজ করি।
ফ্যাবিও মিলহেইরো

84
@ বম্বোকা - পরিষ্কার প্রকল্পের অংশ নয় এমন ডিএলএলগুলি মুছে না। যেমন আপনি যদি আপনার প্রকল্পের সমাবেশের নাম পরিবর্তন করেন তবে পুরানো সমাবেশটি binফোল্ডারে থাকবে ।
জোশ এম

4
আমি একই সমস্যাটি অনুভব করছিলাম এবং এটি আমার সমস্যাটি তত্ক্ষণাত্ সমাধান করে দিয়েছে। ধন্যবাদ!
আলুয়ান হাদাদাদ

4
আমার প্রকল্পটির নামকরণ হয়েছে, এবং পুরানো ডিএলএল এখনও বাকী ফোল্ডারে রয়েছে। দয়া করে লোকেরা: স্থায়ী সমাধান, প্রকাশের সময়, লক্ষ্য ডিরেক্টরিতে সমস্ত ফাইল প্রথমে মুছুন! (ডিরেক্টরিতে প্রকাশের সময় বিকল্প)
StijnSpijker

4
কেন জানি না তবে "ক্লিন সলিউশন" আমার পক্ষে কাজ করে না। আপনার সমাধান কাজ করে।
ব্যবহারকারী 2980426

20

একাধিক কারণে এই ত্রুটিটি ঘটতে পারে, আমারও একই ত্রুটি ছিল এবং গ্লোবাল.এক্স্যাক্স ক্লাসটি সংশোধন করে এটি সমাধান করেছি।

Global.asax.cs এ অ্যাপ্লিকেশন_স্টার্ট পদ্ধতিটি ছিল:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

নিম্নলিখিত পংক্তিটি এই পদ্ধতিতে দু'বার ঘটে:

RouteConfig.RegisterRoutes(RouteTable.Routes);

এটি নিশ্চিত করেছে যে রুটটি রুটের তালিকায় দু'বার যুক্ত হয়েছিল এবং একই সাথে ত্রুটির কারণ হয়েছিল।

আমি নিম্নলিখিতভাবে অ্যাপ্লিকেশন স্টার্ট পদ্ধতিটি পরিবর্তন করেছি এবং ত্রুটিটি অদৃশ্য হয়ে গেছে:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

এটি আপনার সমস্যার উত্তর নাও হতে পারে তবে ভবিষ্যতে অন্যকেও সহায়তা করতে পারে। আমি অন্যদের মধ্যে এই উত্তরটি দেখতে পাইনি, তাই আমি এটি যুক্ত করার সিদ্ধান্ত নিয়েছি।


4
এরিয়া রেজিস্ট্রেশন-রেজিস্টারআলআরিয়াস () তেও একটি নকল কল রয়েছে।
স্পাইভিনিয়াস

এছাড়াও, আমি এটিতে ছুটে এসেছি: ওয়েবএপিপিফিনি.আরজিস্টার (গ্লোবাল কনফিগারেশন। কনফিগারেশন); GlobalConfigration.Configure (WebApiConfig.Register) সহ; উভয়ই WebApiConfig.cs এ একই পদ্ধতি কল করে। ট্রিক অবশ্যই একটি বিরতি স্থাপন করার জন্য যেখানে রুটের নাম সেট করা হচ্ছে এবং কল স্ট্যাকটি দেখুন।
রিড

আমি এই ত্রুটিটি পেয়ে যাচ্ছিলাম এবং অন্য কোনও সমাধান আমার পক্ষে কাজ করে নি, তবে তারপরে আমি নকল এরিয়া রেজিস্ট্রেশন পেয়েছি e আমার Global.asax ফাইলে লাইন। তাদের মধ্যে একটি অপসারণ ত্রুটি মুছে ফেলা হয়েছে।
ewomack

10

আমি খুঁজে পেয়েছি যে গ্লোবাল.এক্স্যাক্স নাম পরিবর্তন করার আগে সাইটের ডিএলএল ফাইলের একটি পুরানো সংস্করণ উল্লেখ করছে। আমি যখন বিল্ড> ক্লিন আপ করলাম তখন ডিএলএল পরিষ্কার হচ্ছিল না কারণ ভিএস প্রকল্প / সমাধান এটিকে আর উল্লেখ করে না। দেখে মনে হয় যে কখনও কখনও কেবলমাত্র ডিএলএল-র নতুন সংস্করণ ব্যবহার করা হয়েছিল, যাতে সাইটটি সঠিকভাবে কাজ করতে পারে, তবে শেষ পর্যন্ত রুট দ্বন্দ্বের কারণে উভয়ই লোড হয়ে যায়।


আমার প্রকল্পটির নামকরণের পরে বিন এবং আপত্তি মুছে ফেলা আমার পক্ষে কাজ করেছিল।
স্টিভ

4
আপনি কীভাবে খুঁজে পেলেন যে গ্লোবাল.আসাক্স একটি পুরানো ডিএলএলকে নির্দেশ করছে?
xaisoft

@ সিয়াসফট: পুরাতন ডিএলএলগুলিতে আমি মুছে ফেলা রুটগুলি ছিল তবে রাউট ডিবাগার দেখিয়েছেন যে তারা এখনও সেখানে রয়েছে। আমি যখন পুরানো ডিএলএল মুছলাম তখন পুরানো রুটগুলিও সরানো হয়েছিল।
Rn222

4

রুটগুলি অ্যাপডোমাইন.কন্টেনডোমাইন-এর মধ্যে সমস্ত অ্যাসেমব্লী থেকে লোড হয়ে যায়, সুতরাং যদি আপনার পুরানো সমাবেশগুলি এখনও এর অংশ হয়, আপনি এখনও পুরানো / সদৃশ রুটগুলি পেয়ে যাচ্ছেন।


4
এই সমস্যা কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?
Rn222

সেটা ঠিক. এটা আমার প্রকল্পে সুখী। যখন আমি এর নাম পরিবর্তন করেছি, তখন এই ত্রুটি ঘটেছে। পুরানো সমাবেশ সরিয়ে দেওয়ার পরে, ত্রুটি চলে গেছে।
বাফসার

3

আমার ক্ষেত্রে, আমি এই সমস্যার মুখোমুখি হয়েছিলাম, যখন আমি সমাধান থেকে অন্য প্রকল্পের রেফারেন্স যুক্ত করেছি, এটিও এমভিসি ছিল এবং একই নামগুলি এলাকায় ব্যবহার করত (আমি এই প্রকল্পটি যুক্ত করতে চাইনি, আমি জানি না এটি কীভাবে হয়েছিল) )। আমি যখন এই ডিএলএল সরিয়েছি তখন প্রকল্পটি কাজ শুরু করে।


এমনকি আমার কাছে এটি ঘটেনি যে এটি ঘটতে পারে, যেহেতু আমি সবসময় আমার সাইটের প্রকল্পগুলিকে "একাধিক টুকরো টুকরো টুকরো টুকরো টুকরো করার পরিবর্তে স্বাবলম্বিত করে রেখেছি" কারণ আর্কিটেকচার "। নতুন টিম, নতুন কনভেনশন, নতুন বিকল্পগুলি কিছু বিকল্পগুলির অভ্যন্তরীণ করার জন্য আমি এখনও কার্যকর পাই নি।
ব্রিচিন্স

2

একা ডিএলএলগুলি মুছে ফেলা আমার পক্ষে কাজ হয়নি (ভিএস ২০১৩ সালে), তবে পুরো 'বিন' এবং 'আপত্তি' ফোল্ডারগুলি মুছে ফেলা এবং তারপরে সমাধানটি পুরোপুরি কার্যকর হয়েছিল! আমাকে ইচ্ছে করে যে আমি এটিকে ঠিক করার চেষ্টা করে এত দিন ব্যয় না করতাম ...


1

কোনও প্রস্তাবনা আমার পক্ষে কাজ করেনি। এগিয়ে গিয়ে ওয়েব সার্ভারটি পুনরায় আরম্ভ করুন (এই ক্ষেত্রে আইআইএস) এবং কোডটি ঠিক করার পরে এটি ত্রুটিটি সাফ করেছে। ডিএলএল অবশ্যই আইআইএস-এ ক্যাচ হয়ে গেছে।


1

এই কোডটি ব্যবহার করে দেখুন, শুধুমাত্র নাম পরিবর্তন করুন

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.MapHttpRoute(
          name: "API",
          routeTemplate: "api/{controller}/{action}",
          defaults: new { action = "GetAgentId" }
      );

0

আমি একই ত্রুটি পাচ্ছি। তবে শেষ পর্যন্ত সমাধান পেয়েছি। পরিস্থিতি: আমি আমার ওয়েব এপিআই এমভিসি 4 অ্যাপ্লিকেশনটিতে বিভিন্ন (এমভিসি 4 অ্যাপ্লিকেশন) ডেল যুক্ত করছি। যখন চালানোর চেষ্টা করুন। আমি একই ত্রুটি পাচ্ছি। রুট কারণ- যখন আমার ওয়েব এপিআই অ্যাপ্লিকেশনটি চালিত হয় lic আবেদনটি নিজের থেকে সমস্ত অঞ্চল নিবন্ধভুক্ত করুন এবং বর্তমান অ্যাপ্লিকেশন ডোমেন dll রেফারেন্সে লোড করা শুরু করুন start যখন অ্যাপ্লিকেশন লোড dll (এমভিসি 4 অ্যাপ্লিকেশন) সেই সময় ত্রুটি হচ্ছে কারণ বর্তমান মানচিত্রটি ইতিমধ্যে "হেল্পপেজ_ডিফল্ট" এর জন্য কী যুক্ত করে।

সমাধান। 1. বর্তমান অ্যাপ্লিকেশন বা বিদ্যমান অ্যাপ্লিকেশন (ডেল পড়ুন) মানচিত্রে রেজিস্টারআরিয়ার জন্য কী পরিবর্তন করুন। 2. বিভিন্ন লিবেরিতে কোড ডেল (এমভিসি 4 অ্যাপ্লিকেশন) কোডটি সরান এবং নতুন ডিএলএল দেখুন।


0

আমি AttributeRoutingHttpConfig.Start()আমার গ্লোবাল.এক্স্যাক্সে ম্যানুয়ালি কল করছিলাম। যে ফাইলটি স্বয়ংক্রিয়ভাবে এটি কল করে তার শীর্ষে এই স্বয়ংক্রিয় উত্পন্ন লাইনটি লক্ষ্য করেনি।

[assembly: WebActivator.PreApplicationStartMethod(typeof(Mev.Events.Web.AttributeRoutingHttpConfig), "Start")]

0

আমার কাছে একটি অ্যাপ্লিকেশন ছিল যা একটি ফর্ম অ্যাপ্লিকেশন ছিল যা প্রমাণীকরণের জন্য ব্যবহৃত একটি তৃতীয় পক্ষের উপাদান সহ এমভিসিতে স্থানান্তরিত হয়েছিল যা অন্য সাইটে পুনঃনির্দেশিত হয়েছে। ব্যবহারকারী ইতিমধ্যে লগ ইন না করে থাকলে (সাইটের প্রাথমিক সংযোগের জন্য একবার এবং ফেরতের জন্য একবার) দু'বার একটি সেশন শুরু হবে। সুতরাং আমি নিম্নলিখিত কোড সহ এটি সমাধান করেছি:

if (routes.Count < 3)
            {
                routes.IgnoreRoute("login.aspx");
                routes.IgnoreRoute("default.aspx");
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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


0

বিন ফোল্ডারে ঘরের কাজগুলি 100% কাজ করে, এখনও আমার প্রকল্পটি পুনর্নির্মাণের জন্য প্রয়োজনীয় ছিল। বরং বিন ফোল্ডারের একটি অনুলিপি তৈরি করুন। তারপরে মূলটি মুছুন the প্রকল্পটি পুনর্নির্মাণ করুন। যদি এটি ব্যর্থ হয়, অনুপস্থিত dllsটিকে বিন ফোল্ডারে রাখুন।


0

আমি একটি পুরানো এমভিসি 2 ওয়েবসাইট চালাচ্ছি এবং আমি এই সমস্যাটি পেয়েছি কারণ আইআইএস 'পরিচালিত পাইপলাইন মোড' ডিফল্টরূপে 'ইন্টিগ্রেটেড' এ সেট করা হয়েছিল (প্রকল্পের F4 টিপুন)। এটি 'ক্লাসিক' এ পরিবর্তন করা সমস্যার সমাধান করেছে


0

একটি অ্যাজুর অ্যাপ সার্ভিসে প্রকাশ করার সময় আমাকে পুরানো প্রকল্পের ডিএলএল এবং প্রতীক ফাইলগুলি সরাতে ডায়লগের "সেটিংস" -> "ফাইল প্রকাশের বিকল্পগুলি" -> "গন্তব্যে অতিরিক্ত ফাইলগুলি সরান" পরীক্ষা করতে হবে। তারপরে সাইটটি লোড হবে।

এটি মূলত মূল উত্তরগুলি (ফ্লাইসের) সমাধান। আপত্তিজনক ডিএলএল মুছুন।

এই পুরাতন ডিএলএলটি কীভাবে ধরে রাখতে পেরেছিল তা হ'ল আমি ওয়েবসাইটটির একটি পুরানো সংস্করণ (এমভিসি 3 ~ 5 টেমপ্লেটগুলি লোড করছি তবে সংঘর্ষের নেমস্পেসের সাথে বিভিন্ন ওয়েব প্রকল্প, যেহেতু নতুন সংস্করণটি এই প্রকল্পের একটি অনুলিপি ছিল সাম্প্রতিক অতীতে কিছু বিষয়বস্তু করে। ) নতুন প্রকল্পের ডিএলএলগুলি সবেমাত্র মুছতে হবে। এটি অর্জনের বিভিন্ন উপায় রয়েছে। আমি একটি ডায়ালগটি ব্যবহার করে এটি সহজতম এটিএম হিসাবে খুঁজে পেয়েছি। ফাইল সিস্টেমে লগইন করা এবং হাত দ্বারা ফাইলগুলিকে অক্ষর দেওয়া অবশ্যই কাজ করে।


0

আপনি যদি সংস্করণ করছেন, এবং আপনি একই নামের সাথে দুটি এপিআই ব্যবহার করেন, আপনি এই ত্রুটিটি পেয়ে যাবেন। আপনার যদি একই গেটের প্রয়োজন হয় তবে রুটের নাম বৈশিষ্ট্যটি পরিবর্তন করার চেষ্টা করুন:

টেস্টকন্ট্রোলার.সি:

      [MapToApiVersion("1.0")]
      [Route("{moniker}", Name = "GetTest")]
      public async Task<IHttpActionResult> Get(string moniker, bool param1 = false)

  [MapToApiVersion("1.1")]
  [Route("{moniker}", Name = "GetTest11")] // Change name here for a different version
  public async Task<IHttpActionResult> Get(string moniker)

এবং ইউআরএল সংস্করণে পাস:

http: // লোকালহোস্ট: 6600 / এপিআই / পরীক্ষা / 2020? এপিআই-সংস্করণ = 1.1


0

এই সমস্যার মুখোমুখি। আমার প্রকল্পে একটি অঞ্চল যুক্ত করার পরে সমস্যা দেখা দিয়েছে। সেখানে জন্য একটি কল ছিল MapMvcAttributeRoutes()মধ্যে RegisterArea()পদ্ধতি। সুতরাং, আপনার কোনও সদৃশ রুটের নাম অনুসন্ধান করা উচিত নয়, কেবল নকল MapMvcAttributeRoutes()কলগুলি সন্ধান করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.