Зоны MVC - не зональный маршрут переходит в зону - PullRequest
7 голосов
/ 17 апреля 2011

Я добавил область в свой проект MVC 3.Я не могу заставить работать маршрутизацию с очень простым сценарием.Кажется, всегда хотят разрешить в этой области.Вот моя конфигурация.При запуске:

AreaRegistration.RegisterAllAreas();
IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Browse", action = "Index", id = UrlParameter.Optional }

И

public class AdminAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get { return "Admin"; }
    }

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

В web.config:

<authentication mode="Forms">
  <forms loginUrl="~/Login" defaultUrl="~/Browse" timeout="60" cookieless="UseDeviceProfile" />
</authentication>

Я использую RouteDebugger, чтобы попытаться ее решить.Когда я перехожу на страницу входа в систему, отладчик показывает:

  • AppRelativeCurrentExecutionFilePath: ~ Login
  • Admin / {controller} / {action} / {id} Не соответствует Текущий запрос
  • {controller} / {action} / {id} Соответствует Текущий запрос
  • Соответствующий маршрут: {controller} / {action} / {id}

Пока все хорошо.Но затем он показывает это:

  • Сгенерированный URL: / Admin / Логин? ReturnUrl =% 2F по маршруту "Admin / {controller} / {action} / {id}"

Далее я регистрируюсь. Мой метод Login / Index не используется, и отладчик показывает:

  • AppRelativeCurrentExecutionFilePath: ~ Login
  • Admin / {controller} / {action} / {id} не совпадает текущий запрос
  • {controller} / {action} / {id} соответствует текущий запрос
  • соответствует маршруту: {controller} / {action} / {id}
  • Сгенерированный URL: / Admin / Login? ReturnUrl =% 2FAdmin% 2FLogin, используя маршрут «Admin / {controller} / {action} / {id}»

С одной стороны, он говорит, что он не соответствует маршруту администратора, а затем в сгенерированном URL-адресе он говорит, что использует этот маршрут.Я в тупике.

1 Ответ

3 голосов
/ 04 мая 2011

Попытайтесь добавить свой параметр области с предопределенным значением в определение маршрута ... Например, вместо:

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Users", action = "Index", id = UrlParameter.Optional }
        );

используйте:

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { area = "Admin", controller = "Users", action = "Index", id = UrlParameter.Optional }
        );

Дайте мне знать, если этопомогает ... С уважением

...