Azure部署:名为' HelpPage_Default'已经在路线集合中。路线名称必须是唯一的。参数名称:名称

时间:2017-11-14 19:45:24

标签: c# asp.net-mvc asp.net-mvc-4 azure-web-sites azure-web-app-service

当我在本地运行时,网站运行良好。但是,当部署在Microsoft Azure上时,它会抛出上述错误。

我已经尝试从bin文件夹和obj文件夹中删除.DLL文件,但问题仍然存在。

堆栈追踪:

[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) +3213863
   System.Web.Mvc.RouteCollectionExtensions.MapRoute(RouteCollection routes, String name, String url, Object defaults, Object constraints, String[] namespaces) +203
   System.Web.Mvc.AreaRegistrationContext.MapRoute(String name, String url, Object defaults, Object constraints, String[] namespaces) +56
   Makewayy.Areas.HelpPage.HelpPageAreaRegistration.RegisterArea(AreaRegistrationContext context) +87
   System.Web.Mvc.AreaRegistration.CreateContextAndRegister(RouteCollection routes, Object state) +104
   System.Web.Mvc.AreaRegistration.RegisterAllAreas(RouteCollection routes, IBuildManager buildManager, Object state) +190
   System.Web.Mvc.AreaRegistration.RegisterAllAreas(Object state) +34
   Makewayy.WebApiApplication.Application_Start() +12

[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) +10104513
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +173
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[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) +10085804
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +95
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)

路线配置: -

public class RouteConfig
    {
        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 }
            );
        }
    }
}

AreaRegistration -

namespace Makewayy.Areas.HelpPage
{
    public class HelpPageAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "HelpPage";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "HelpPage_Default",
                "Help/{action}/{apiId}",
                new { controller = "Help", action = "Index", apiId = UrlParameter.Optional });

            HelpPageConfig.Register(GlobalConfiguration.Configuration);
        }
    }
}

4 个答案:

答案 0 :(得分:2)

  

名为“HelpPage_Default”的路径已在路径集合中。路线名称必须是唯一的。

根据我的理解,您需要确保没有多次定义名为HelpPage_Default的路由。此外,您需要检查代码并确保AreaRegistration.RegisterAllAreas();只能调用一次。

此外,请确保您的应用程序可以在您当地工作。在将其发布到azure网站之前,您可以使用kudu并清空D:\home\site\wwwroot下的网络内容,然后重新部署您的应用。

答案 1 :(得分:1)

专门用于重命名文件后部署到Azure的答案here可能是答案。当我在本地部署时,一切正常,清理/删除bin文件夹什么也没做,是什么工作。

  1. 在Visual Studio的“发布”屏幕上,单击“配置”
  2. 在新窗口中,点击垂直的“设置”标签
  3. 扩展文件发布选项
  4. 选中“在目标位置删除其他文件”复选框。

enter image description here

答案 2 :(得分:0)

如果清理bin文件夹仍然无济于事,可能是因为您不小心在项目中添加了对解决方案的另一个API的引用(这将注册两个API的路由配置->哎呀!)。

答案 3 :(得分:0)

在我重命名项目、重命名文件夹结构并更改 .sln 文件以反映这些更改后,我遇到了此错误。我尝试清洁溶液,但这对我不起作用。我不得不删除 bin 文件夹的内容,然后我才解决了错误。