ASP.NET vNext,区域中的多个HomeControllers

时间:2015-04-15 07:46:03

标签: asp.net asp.net-mvc asp.net-mvc-routing

我正在查看ASP.NET 5和MVC 6,并且我正在使用默认的启动器模板。我现在已经建立了一个区域,我希望有一个" HomeController"。因此,默认的HomeController不会放在一个区域中,然后在Areas / MyArea中会有HomeController。

Startup.cs中的以下配置显然不起作用:

            routes.MapRoute(
                name: "areaRoute",
                template: "{area:exists}/{controller}/{action}",
                defaults: new { controller = "Home", action = "Index" });

            routes.MapRoute(
                name: "default",
                template: "{controller}/{action}/{id?}",
                defaults: new { controller = "Home", action = "Index" });

它给了我这个错误信息:

  

AmbiguousActionException:匹配多个动作。下列   动作匹配路线数据并满足所有约束条件:

     

MyProject.Controllers.HomeController.Index   MyProject.Areas.MyArea.Controllers.HomeController.Index

在早期的MVC版本中,您应该能够通过为路由配置定义命名空间来解决它,如本博文中所述:http://blog.falafel.com/duplicate-controller-names-aspnet-mvc-areas/

虽然这不适合我。如果我将namespaces: new string[] { "MyProject.Controllers" }添加到默认路由,则会收到以下错误:

  

错误CS1501方法没有过载' MapRoute'需要4个   参数MyProject.ASP.NET 5.0 Startup.cs 81

如果我能就此得到一些建议,我将非常感激,能够在我的系统中使用多个HomeController会很高兴。

1 个答案:

答案 0 :(得分:5)

您是否在类MyProject.Areas.MyArea.Controllers.HomeController.Index上有Area属性

类似

using Microsoft.AspNet.Mvc;

namespace MyProject.Areas.MyArea.Controllers
{
    [Area("MyArea")]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
}

然后url / MyArea / Home /应该路由到这个控制器,而/ Home /应该路由到不在某个区域的家庭控制器。