仅在 IIS 上部署后 Asp.net Web API 异常:名为 '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>

我刚刚遇到了同样的问题。我认为导致错误是因为我之前已将另一种解决方案推送到我的网站,并且有剩余的文件以某种方式妨碍了我。

为了解决这个问题,我在通过Visual Studio发布到我的Azure站点时选中了"删除目的地的其他文件"框。我假设您也可以在发布之前手动删除服务器上的任何旧文件。在此之后,该网站运行良好,没有错误。

  1. 在 Visual Studio 中右键单击您的解决方案 ->单击"清理解决方案"
  2. 删除 \项目\bin\ 文件夹下的所有文件
  3. 在 Visual Studio 中重新生成解决方案干杯。

我通过重构它来重命名命名空间,这样做错过了这个硬编码字符串:

项目>领域> 帮助页面> 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)",
重命名

项目名称后我遇到了同样的问题。所以

  1. 在整个解决方案中查找并替换正确的名称。
  2. 清洁解决方案
  3. 删除项目的 bin & obj 文件夹。
  4. 重建解决方案

..是的,它有效。

我遇到了同样的问题,并尝试了来自不同线程的多个具有类似问题的提议解决方案,但一无所获。

终于从团队资源管理器中签出了解决方案的干净副本,并为我修复了它。

我遇到了这个问题,原因最终是我让那个 Web 项目引用了另一个 Web 项目。我只是删除了引用,不需要清洁解决方案。

在本地 IIS 上部署应用程序时遇到了同样的问题。我的发布目录和 IIS 托管目录是相同的。我尝试了以下步骤,它对我有用:

  1. 单击解决方案>>发布
  2. 删除现有文件>>设置>>展开文件发布选项
  3. 选中复选框 在发布之前删除所有现有文件 为 true;
  4. 选中"发布期间预编译"复选框为 true。

最新更新