我已将以下路由添加到我的global.asax文件中:

routes.MapRoute(
    "Admin_Route",
    "Admin/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new[] { "PriceCompare.Admin.Controllers" }
    );

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    new[] { "PriceCompare.Controllers" } 
    );

管理控制器(如ManageCatsController,ManageBrandsController等)位于PriceCompare.Admin.Controllers命名空间中,其他常规控制器则位于PriceCompare.Controllers命名空间中。

问题是,无论它们是否位于PriceCompare.Admin.Controllers命名空间中,我都可以通过在它们前面添加Admin /来访问所有控制器。

另外,我可以直接访问管理控制器,而无需添加Admin /前缀。

为什么会这样呢? 我是否误解了路由行为。

===============>>#1 票数:1 已采纳

您需要注册您的管理区域。

当我为区域注册路线时,我总是这样做:

在App / Areas / Admin文件夹中,创建一个AdminAreaRegistration.cs文件,其中包含此文件...

using System.Web.Mvc;
namespace AppName.Areas.Admin
{
    public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin",
                "Admin/{controller}/{action}/{id}",
                new { controller="Home", action = "Index", id = UrlParameter.Optional },
                new string[] { "AppName.Areas.Admin.Controllers" }
            );
        }
    }
}

现在在Global.asax执行以下操作:

protected void Application_Start()
    {
        // Add this next line
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        // Add any other stuff (like IoC or whatever)
    }

并且仅在Global.asax RegisterRoutes中注册普通路由,如下所示:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
        new string[] { "AppName.Controllers" }
        );
 }

我还建议将Area部分保留在您的Admin名称空间内(因此在您的情况下称为PriceCompare.Areas.Admin.Controller ),因为这将使以后的工作变得容易PriceCompare.Areas.Admin.Controller

请尝试这个,让我知道它是否有效:-)

  ask by Pankaj Upadhyay translate from so

未解决问题?本站智能推荐:

2回复

网址路由帮助Asp.net Mvc

我有三种网址类型。 这些: 首先: http:// localhost / 第二个: http:// localhost / X / 第三名: http:// localhost / X / Y / 示例网址: http:// localhost / test /
2回复

asp.net mvc3和多级导航

我正在编写新的asp.net mvc应用程序,并且对创建多级导航系统有疑问。 例如,我的网站具有主导航功能(Cpu --- Gpu ---- Ram) 和(-intel,amd --- ati,nvidia --- DDR2,DD3)进行子导航 好吧,我的第一个实现是在这里:
1回复

MVC3路由:匹配任何字符串

简单的问题: 如何在MVC3路由系统中匹配字符串? 例:
3回复

MVC 3路由和操作链接未遵循预期的上下文路由

我正在尝试执行自定义路由,因此可以在应用程序中为URL加上所选字符串作为前缀,并在此基础上进行一些处理。 我遇到的问题是,生成的操作链接没有根据其存在的URL进行上下文化。 路线: 导航到TEST / Space / Index以及Space / Index都可以,但是我需要解决
2回复

MVC3 URL编码?

ASP.NET MVC3 / Razor。 我发现当我创建一个动作链接时,比如说: MVC3引擎创建我的产品链接。 例如: 但是,如果我的产品ID包含任何特殊字符,则不会对其进行URL编码。 当然,这打破了我的路由。 我的问题是: 我应该期望它自动ur
2回复

如何在MVC3中控制URL

我使用MVC3的默认登录模型。 登录局部视图在布局视图中。 登录后,Url为: 我不希望在URL中看到密码。 如何从URL中删除密码(也包括用户名,RememberMe)?
1回复

ASP.NET MVC路由无法正常工作

我有点被ASP.NET MVC应用程序中的某些路由问题所阻塞。 让我们假设我有2个控制器: TaskList控制器 任务控制器 我不知道这是否是矫kill过正,但我​​的目标是使URL如下: 对于TaskList控制器: 本地主机:xxxx /任务
1回复

asp.net mvc 5路由动作不同的位置

我正在为自己制作一个应用程序,并且路由时遇到问题。 asp.net mvc routeConfig.cs的默认值如下: 我想要一个重定向链接,如book / 1 / edit或book / 1 / history。 如果我编辑此代码行,下面的工作 但目前,如果我转到“
1回复

asp.net MVC路由配置

我有一个带有路由配置规则的ASP.Net MVC应用程序,包括以下内容: 我只是添加了具有相同数量参数的新操作,并且我的路由配置也这样更改(添加了rule2): 现在,当我调用http://localhost:51650/Home/action2/1/en/1/1它不会路由到ac
1回复

ASP.NET MVC路由:URL陷入错误的路由

我正在研究一个非常普通的mvc项目,并且有三种不同的方法: 按ID路由展示产品 按类别展示产品的路线 默认路线 结论:我希望/ products / create请求属于默认路由( 因为我希望将“ create”呈现为一个动作 ),而不属于按类别获取路由( 因为它将