0

所以我构建了一个新的 ASP.NET MVC4 应用程序,一些非常简单的东西。我添加了一个区域用于管理目的。当我在 Visual Studio 的 IIS Express 上进行调试时,一切正常。

当我在 Windows Server 2012 的 IIS 上部署此应用程序时,问题就出现了,大多数情况下,当我尝试访问我的区域时,我会收到 404 错误。奇怪的是,有时,在重新部署应用程序(但没有改变任何东西)之后,该区域将工作一段时间(直到应用程序池可能被回收?)

无论如何,这真的很奇怪,我需要帮忙。这是我所做的:

这是我RouteConfig的基本应用程序:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "NewsFilter",
            url: "Articles/{tagName}",
            defaults: new { controller = "Home", action = "Index", tagName = UrlParameter.Optional },
            namespaces: new[] { "myapp.Controllers" }
        );

        routes.MapRoute(
            "ViewArticle",
            "Article/{articleId}/{articleTitle}",
            new { controller = "Article", action = "Index", articleTitle = UrlParameter.Optional },
            new { articleId = @"\d+" },
            namespaces: new[] { "myapp.Controllers" }
        );


        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "myapp.Controllers" }
        );
    }
}

现在这是我AdminAreaRegistration的管理区域

public class AdminAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Admin";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            name: "Admin_default",
            url: "Admin/Home/{action}/{id}",
            defaults: new { controller="Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new []{ "myapp.Areas.Admin.Controllers" }
        );
        context.MapRoute(
            name: "Admin_news",
            url: "Admin/News/{action}/{id}",
            defaults: new { controller="News", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "myapp.Areas.Admin.Controllers" }
        );
        context.MapRoute(
            name: "Admin_Tags",
            url: "Admin/Tags/{action}/{id}",
            defaults: new { controller = "Tags", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "myapp.Areas.Admin.Controllers" }
        );
    }
}

现在在这里 idApplication_Start方法来自Global.asax

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas(); //This registers the admin Area

        WebApiConfig.Register(GlobalConfiguration.Configuration); //I did not delete WebApiConfig even though I'm not using it
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes); //And here are my "normal" routes
        BundleConfig.RegisterBundles(BundleTable.Bundles);

    }

我的 Admin 区域中的所有控制器都在 namespace 中myapp.Areas.Admin.Controllers。主应用程序控制器位于命名空间中myapp.Controllers

在 IIS 上,应用程序的应用程序池在 .net 4.0 集成模式下运行。

知道为什么该区域在调试模式下工作,有时在 IIS 上工作并大部分时间返回 404吗?

4

0 回答 0