web-dev-qa-db-fra.com

Asp.net web api exception seulement après le déploiement à IIS : Une route nommée 'HelpPage_Default' se trouve déjà dans la collection de routes

J'ai lu this question et essayé les solutions mentionnées, mais je ne reçois cette exception qu'après avoir publié l'application sur IIS d'un serveur distant. Dans IIS de mon ordinateur local, l'application fonctionne correctement. Je n'ai aucune idée de ce qui cause cette exception sur ce serveur:

Server Error in '/' Application.

A route named 'HelpPage_Default' 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 'HelpPage_Default' is already in the route collection. Route names must be unique.
Parameter name: name
Source Error:  
An unhandled exception was generated during the execution of the current web request. Information regarding the Origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 

[ArgumentException: A route named 'HelpPage_Default' is already in the route collection. Route names must be unique.
Parameter name: name]
   System.Web.Routing.RouteCollection.Add(String name, RouteBase item) +3713577
   System.Web.Mvc.RouteCollectionExtensions.MapRoute(RouteCollection routes, String name, String url, Object defaults, Object constraints, String[] namespaces) +350
   System.Web.Mvc.AreaRegistrationContext.MapRoute(String name, String url, Object defaults, Object constraints, String[] namespaces) +95
   XbimServer.Areas.HelpPage.HelpPageAreaRegistration.RegisterArea(AreaRegistrationContext context) +174
   System.Web.Mvc.AreaRegistration.RegisterAllAreas(RouteCollection routes, IBuildManager buildManager, Object state) +323
   BimServer.WebApiApplication.Application_Start() +23

[HttpException (0x80004005): A route named 'HelpPage_Default' is already in the route collection. Route names must be unique.
Parameter name: name]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12600317
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): A route named 'HelpPage_Default' is already in the route collection. Route names must be unique.
Parameter name: name]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12617364
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12456981

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34212

Voici ce que j'ai configuré à Global.asax.cs:

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

Mon RouteConfig.cs:

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

Et mon WebApiConfig.cs:

config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

J'ai également apporté les modifications suivantes à mon fichier web.config:

<system.webServer>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
30
Aminul

Je viens de rencontrer le même problème. Je pense que l'erreur a été provoquée parce que j'avais déjà introduit une autre solution sur mon site et qu'il restait des fichiers restants qui gênaient.

Pour résoudre ce problème, j'ai coché la case "Supprimer les fichiers supplémentaires à la destination" lors de la publication via Visual Studio sur mon site Azure. Je suppose que vous pouvez également supprimer manuellement tous les anciens fichiers présents sur le serveur avant la publication. Après cela, le site a fonctionné sans erreurs.

59
Tibincrunch
  1. Cliquez avec le bouton droit sur votre solution dans Visual Studio -> cliquez sur Nettoyer la solution.
  2. Supprimez tous les fichiers sous vos dossiers\Project\bin \
  3. Reconstruisez votre solution dans Visual Studio Cheers.
20
user5225916

J'ai renommé un espace de noms en le refacturant et en omettant cette chaîne codée en dur:

Projet> Zones> HelpPage> AppStart:

public static class HelpPageConfig
    {
        [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters",
            MessageId = "<CORRECT NAMESPACE>.Areas.HelpPage.TextSample.#ctor(System.String)",
4
Jeremy Thompson

J'ai eu le même problème et j'ai essayé plusieurs solutions proposées à partir de threads différents avec des problèmes similaires et je n'ai abouti à rien.

Je viens enfin de sortir une copie vierge de la solution de l'équipe Explorer et je l'ai corrigée. 

1
aemorales1

J'ai le même problème après avoir renommé le nom du projet. Alors, 

  1. Recherchez et remplacez le nom correct dans l'ensemble de la solution.
  2. Solution propre
  3. Supprimer le dossier bin & obj du projet.
  4. Reconstruire la solution

..Oui cela fonctionne.

0
King_Fisher