WebApiConfig.Register清除RouteConfig.RegisterRoutes apon deployment

时间:2015-05-19 02:00:59

标签: asp.net-mvc asp.net-mvc-4 iis asp.net-mvc-routing asp.net-web-api-routing

我在这里奋斗街道,当我尝试添加API控制器时,它似乎会破坏我的所有MVC基本路线和区域路线。

在我的申请开始时,我致电

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    Util.RazorDebuggingSetup();
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
}

using System.Web.Mvc;

区域配置示例:

namespace **.Areas.Console
{
    public class ConsoleRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Console";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Console_default",
                "Console/Index",
                new { controller = "base", action = "Index"}
            );

            context.MapRoute(
                "Console_default2",
                "Console/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

我的WebApiConfig类

using System.Web.Http;

namespace **.Modules.MVC
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration configuration)
        {
            configuration.Routes.MapHttpRoute(
                "API Default", 
                "api/{controller}/{id}",
                new
                {
                    id = RouteParameter.Optional
                }
            );
        }
    }
}

路线类

using System.Web.Mvc;
using System.Web.Routing;

namespace **.Modules
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.MapRoute(
                "ErrorHandler",
                "Error/{action}/{id}",
                new { controller = "Error", action = "Generic" , id = UrlParameter.Optional }
            );

            // Ignore old Friendly URLS.
            // These should be removed.
            routes.IgnoreRoute("Account/Login");
            routes.IgnoreRoute("");
            routes.IgnoreRoute("Website/{*pathInfo}");
            routes.IgnoreRoute("Pages/{*pathInfo}");

            routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
            routes.IgnoreRoute("{*allasp}",  new { allasp = @".*\.asp(/.*)?" });
            routes.IgnoreRoute("{*allhtml}", new { allhtml = @".*\.html(/.*)?" });
            routes.IgnoreRoute("{*allphp}",  new { allphp = @".*\.php(/.*)?" });

            //Default Mvc ignore.
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

            //routes.MapRoute(
            //    "404-PageNotFound",
            //     "{*url}",
            //     new { controller = "Error", action = "HttpError" }
            //);
        }
    }
}

现在在我的本地iis上,所有功能都按预期运行,但是当我尝试访问我的生产服务器上的URL时,我得到以下404.

当我打开路线调试时,我会在本地看到这一点。

    • 匹配当前请求:错误
    • 网址:r.ashx / {module} / {* path}
    • 默认值:( null)
    • 约束:( null)
    • DataTokens:(null)
    • 匹配当前请求:True
    • 网址:控制/索引
    • 默认值:controller = base,action = Index
    • 约束:(空)
    • DataTokens:Namespaces = BookEasy.Areas.Control。*,area = Control,UseNamespaceFallback = False
    • 匹配当前请求:True
    • Url:Control / {controller} / {action} / {id}
    • 默认值:action = Index,id = UrlParameter.Optional
    • 约束:(空)
    • DataTokens:Namespaces = BookEasy.Areas.Control。*,area = Control,UseNamespaceFallback = False
    • 匹配当前请求:错误
    • 网址:控制台/索引
    • 默认值:controller = base,action = Index
    • 约束:(空)
    • DataTokens:Namespaces = BookEasy.Areas.Console。*,area = Console,UseNamespaceFallback = False
    • 匹配当前请求:错误
    • 网址:控制台/ {控制台} / {操作} / {id}
    • 默认值:action = Index,id = UrlParameter.Optional
    • 约束:(空)
    • DataTokens:Namespaces = BookEasy.Areas.Console。*,area = Console,UseNamespaceFallback = False
    • 匹配当前请求:错误
    • 网址:api / {controller} / {id}
    • 默认值:id =
    • 约束:(空)
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:错误/ {action} / {id}
    • 默认值:controller =错误,操作=通用,id = UrlParameter.Optional
    • 约束:(空)
    • DataTokens :(空)
    • 匹配当前请求:错误
    • 网址:帐户/登录
    • 默认值:( null)
    • 约束:(空)
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:
    • 默认值:( null)
    • 约束:(空)
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:网站/ {* pathInfo}
    • 默认值:( null)
    • 约束:(空)
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:Pages / {* pathInfo}
    • 默认值:( null)
    • 约束:(空)
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:{* allaspx}
    • 默认值:( null)
    • 约束:allaspx =。 .aspx(/.)?
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:{* allasp}
    • 默认值:( null)
    • 约束:allasp =。 .asp(/.)?
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:{* allhtml}
    • 默认值:( null)
    • 约束:allhtml =。 .html(/.)?
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:{* allphp}
    • 默认值:( null)
    • 约束:allphp =。 .php(/.)?
    • DataTokens:(null)
    • 匹配当前请求:错误
    • Url:{resource} .axd / {* pathInfo}
    • 默认值:( null)
    • 约束:(空)
    • DataTokens:(null)
    • 匹配当前请求:错误
    • 网址:{* favicon}
    • 默认值:( null)
    • 约束:favicon =(。 /)?favicon.ico(/.)?
    • DataTokens:(null)
    • 匹配当前请求:True
    • 网址:{* catchall}
    • 默认值:( null)
    • 约束:( null)
    • DataTokens:(null)
  1. 很抱歉,这个文本墙似乎是没有表格显示数据的最佳方式。 https://meta.stackexchange.com/questions/73566/is-there-any-markdown-to-create-tables

    无论如何都有问题。

    现在我在部署的服务器上调试路由时看到的内容。

      • 匹配当前请求:错误
      • 网址:r.ashx / {module} / {* path}
      • 默认值:( null)
      • 约束:( null)
      • DataTokens:(null)
      • 匹配当前请求:True
      • 网址:{* catchall}
      • 默认值:( null)
      • 约束:( null)
      • DataTokens:(null)
    1. 其他一些事实。

      Mvc Version = 4

      IIS = 7

      当我删除WebApiConfig.Register(GlobalConfiguration.Configuration);表匹配(但都错过了api / *路由)。

      所以问题的核心。当我添加WebApiConfig.Register时,为什么这两个路由表不同?

      ----------------编辑1 ------------------

      另外注意,添加WebApiConfig.Register也会破坏我的捆绑路由:(。

1 个答案:

答案 0 :(得分:1)

做一些挖掘我注意到了这一点。 https://stackoverflow.com/a/26972184/2560687

IMO第一点不好,因为它不具体。

注意第2点: 我的本地机器在gac中有这些dll但是部署机器没有。并将local = true复制到dll,一切正常:D

当问题回答是针对不同问题的建议答案时,此处的正确程序是什么?