【问题标题】:ASP.NET vNext, multiple HomeControllers in areasASP.NET vNext,多个 HomeController 区域
【发布时间】:2015-05-27 14:17:40
【问题描述】:

我正在查看 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,那就太好了。

【问题讨论】:

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


    【解决方案1】:

    你有 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/ 应该路由到不在一个区域中的 home 控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-04
      • 2010-09-12
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多