Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 区域是否使用前缀的布线_C#_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

C# 区域是否使用前缀的布线

C# 区域是否使用前缀的布线,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,在我的应用程序中,我有两个区域:Portal和Admin。我想在XXXAreaRegistration.cs文件中配置路由 我想要的是/{controller}/{action}用于门户和/admin/{controller}/{action}用于管理面板 我尝试了以下配置以使其成为可能: // AdminAreaRegistration.cs context.MapRoute("Admin", "admin/{controller}/{action}",

在我的应用程序中,我有两个区域:
Portal
Admin
。我想在
XXXAreaRegistration.cs
文件中配置路由

我想要的是
/{controller}/{action}
用于
门户
/admin/{controller}/{action}
用于
管理
面板

我尝试了以下配置以使其成为可能:

// AdminAreaRegistration.cs
context.MapRoute("Admin",
                 "admin/{controller}/{action}",
                 new { action = "Index", controller = "Admin" });

// PortalAreaRegistration.cs
context.MapRoute("Portal",
                 "{controller}/{action}",
                 new { action = "Index", controller = "Portal" });

对于
/
我得到了我的
Portal/Index.cshtml
,但是对于
/admin
我得到了
404
。。。我假设在第二种情况下,它在
Portal
区域中查找
AdminController
,这就是我得到
404
的原因。但是如何创建这样一个路由呢?

当您调用路由搜索时,因为默认控制器是admin,所以在代码中设置默认参数为existing control

我猜在诸如admin之类的区域没有控制

名称空间向上

修复代码如下所示

 context.MapRoute("Admin",
             "admin/{controller}/{action}",
             new { action = "Index", controller="Home"},
             new string[] { "MyApp.Admin.Controllers" }  // specify the new namespace);

要解决当前存在的路由冲突,请向门户区域注册添加约束:

// PortalAreaRegistration.cs
context.MapRoute(
    "Portal",
    "{controller}/{action}",
    new { action = "Index", controller = "Portal" },
    new { controller = "^(?!.*admin).*$" }
);
这将确保门户区域将映射到除
admin/*
之外的所有
{controller}/{action}
,因为您希望管理区域提供此服务

当然,除了显而易见的原因之外,您不能在门户区域中使用名为
AdminController
的控制器。

效果非常好:)谢谢您,先生!