Подтвердить что ты не робот

Исключение asp.net web api только после развертывания в IIS: маршрут с именем "HelpPage_Default" уже находится в коллекции маршрутов

Я прочитал этот вопрос и попробовал решения, упомянутые там, но я получаю это исключение только после того, как я опубликовал приложение для IIS удаленного сервера. На моем локальном компьютере IIS приложение работает нормально. Я не знаю, что вызывает это исключение на этом сервере:

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

Вот что я установил в 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);
        }

Мой 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 }
            );
        }

И мой WebApiConfig.cs:

config.MapHttpAttributeRoutes();

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

Я также внесла следующее изменение в файл 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>
4b9b3361

Ответ 1

Я просто столкнулся с той же проблемой. Я думаю, что ошибка была вызвана тем, что раньше я нажал другое решение на свой сайт, и остались файлы, которые каким-то образом мешали.

Чтобы исправить это, я установил флажок "Удалить дополнительные файлы в месте назначения" при публикации через Visual Studio на моем сайте Azure. Я бы предположил, что вы могли бы просто вручную удалить старые файлы, которые были на сервере, прежде чем публиковать. После этого сайт работал нормально, без ошибок.

Ответ 2

  • Щелкните правой кнопкой мыши свое решение в Visual Studio → нажмите "Очистить решение"
  • Удалите все файлы в папке \Project\bin\
  • Восстановите свое решение в Visual Studio Приветствия.

Ответ 3

Я переименовал пространство имен, отредактировав его и выполнив это, пропустил эту стробированную строку:

Проект > Области > 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

У меня была эта же проблема и я попробовал несколько предлагаемых решений из разных потоков с подобными проблемами и не получил нигде.

Я, наконец, только что проверил чистую копию решения из команды explorer и исправил ее для меня.

Ответ 5

У меня такая же проблема после переименования названия проекта. Итак,

  1. Найти & Замените правильное имя во всем решении.
  2. Чистый раствор
  3. Удалить корзину & папка проекта obj.
  4. Восстановить решение

..Да, это работает.

Ответ 6

У меня была такая же проблема при развертывании приложения на локальном IIS. Мой каталог публикации и каталог размещения IIS совпадают. Я попытался с помощью следующих шагов, у меня это сработало:

  1. Нажмите на Решение >> опубликовать
  2. Удалить существующий файл >> настройки >> развернуть параметры публикации файла
  3. check checkbox Удалить все существующие файлы перед публикацией - true;
  4. check checkbox Предварительная компиляция во время публикации - true.