MVC 3 - новая область - ошибка 404 - ресурс не найден - пробовал отладчик маршрута - PullRequest
11 голосов
/ 21 декабря 2010

У меня есть небольшое приложение MVC 3 - немного демонстрационной площадки. У меня есть одна область, и она работает нормально.

Я только что добавил еще одну область, ожидающую, что приложение будет просто раскручиваться, и оно заработает, но нет, 404. Ресурс не найден.

Маршрут карты в AreaRegistration по умолчанию (как и первая область, которую я создал).

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

Я попытался добавить в него определенный контроллер, но ничего.

Итак, я скачал RouteDebugger Фила Хаака, и мой маршрут был найден при наборе http://server/Postcard/Create (вот где я тоже пытаюсь его найти)

Структура Района

alt text

Мой контроллер

    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);
    }

СЕЙЧАС: я удалил всю область, попробовал еще раз, она не сработала. Поэтому я добавил в конкретный контроллер в маршруте (Inside AreaRegistration файл)

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

И это работает ... Я не знаю, почему это не сработало, когда я делал это раньше, но сейчас.

Все еще любопытно, так как я не видел, чтобы кто-нибудь добавил этот контроллер в маршрут в какой-либо из демонстраций, на которые я смотрел - и у меня нет этого в моей другой области?

Ответы [ 3 ]

31 голосов
/ 21 апреля 2012

Я столкнулся с этим, когда переместил контроллер в область, но забыл обновить пространство имен. Имя контроллера находится в пространстве имен области. Поэтому «Некоторые» в «Области» будут сопоставлены с App.Areas.Area.Controllers.SomeController, которого не было.

3 голосов
/ 09 июня 2011

Вы пропустили часть контроллера в вашем maproute

0 голосов
/ 14 августа 2017

Попробуйте добавить класс PostCardAreaRegistration под PostCard Area

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 }
            );
        }
    }
}
...