【问题标题】:MVC 3 - New Area - 404 error - Resource not found - have tried route debuggerMVC 3 - 新区域 - 404 错误 - 找不到资源 - 已尝试路由调试器
【发布时间】:2011-05-28 20:40:49
【问题描述】:

我有一个小型 MVC 3 应用程序 - 一个演示场地。 我有一个区域,并且运行良好。

我刚刚添加了另一个区域,希望只是启动应用程序并且它可以工作 - 但不,404 - 找不到资源。

AreaRegistration 中的地图路线是默认的(我创建的第一个区域也是如此)。

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Postcard_default",
            "Postcard/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }

我尝试在其中添加一个特定的控制器,但没有。

所以我下载了 Phil Haack 的 RouteDebugger,在输入 http://server/Postcard/Create 时找到了我的路线(这也是我想要到达的地方)

区域结构

我的控制器

    public class CreateController : Controller
{
    private ILogger Logger { get; set; }
    private ICardSender Emailer { get; set; }
    private IOCCardRepository CardRepository { get; set; }

    public CreateController(ILogger logger, ICardSender cardSender, IOCCardRepository repository)
    {
        this.Logger = logger;
        this.Emailer = cardSender;
        this.CardRepository = repository;
    }


    //
    // GET: /Postcard/Create/

    public ActionResult Index()
    {
        var model = new OCPostcardModel().Create();

        return View(model);
    }

现在:我已经删除了整个区域,再次尝试它没有工作。所以我在路由中添加了具体的控制器(在AreaRegistration文件里面)

context.MapRoute(
            "Postcard_default",
            "Postcard/{controller}/{action}/{id}",
            new { controller = "Create", action = "Index", id = UrlParameter.Optional }
        );

它的工作......我不知道为什么我以前这样做时它不起作用,但现在它是。

尽管我还没有看到任何人在我看过的任何演示中将此控制器添加到路由中,但我仍然很好奇 - 而且我在其他区域中没有它?

【问题讨论】:

  • 值得添加 - 这是作为 MVC Preview 1 应用程序开始的,我已经通过平台安装程序安装了 MVC Preview 2
  • 还有 1 个!我在我的 Postcard AreaRegistration 中的 RegisterArea 方法上设置了一个断点——它被命中了。我还在Controller(和Index Action)的构造函数上设置了一个断点,都没有命中?
  • 请提供更多信息。你的控制器是什么样子的?

标签: asp.net-mvc model-view-controller routing http-status-code-404 asp.net-mvc-3


【解决方案1】:

当我将控制器移动到区域但忘记更新命名空间时,我遇到了这个问题。控制器名称的范围是区域的命名空间。所以“Area”中的“Some”会映射到不存在的App.Areas.Area.Controllers.SomeController。

【讨论】:

  • +1,如果您实施区域,您应该返回并更新所有路由以包含您希望路由隔离到的命名空间。如果您在根目录和区域中都有同名的控制器,例如“Home”,这将导致问题。
  • 就我而言,解决方案与此处提出的解决方案类似:我复制/粘贴了 AreaRegistration,但也忘记更新命名空间。
【解决方案2】:

您的地图路由中缺少控制器部分

【讨论】:

    【解决方案3】:

    尝试在PostCard Area下添加一个类PostCardAreaRegistration

    using System.Web.Mvc;
    
    namespace Areas.PostCard
    {
        public class PostCardAreaRegistration: AreaRegistration 
        {
            public override string AreaName 
            {
                get 
                {
                    return "PostCard";
                }
            }
    
            public override void RegisterArea(AreaRegistrationContext context) 
            {
                context.MapRoute(
                    "PostCard_default",
                    "PostCard/{controller}/{action}/{id}",
                    new { action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多