ASP.NET MVC Area не выбирает правильный маршрут - PullRequest
0 голосов
/ 31 января 2011

Я нахожусь в процессе отладки проблемы маршрутизации в моем приложении MVC 3, и я использую отладчик маршрутизации Phil Hacks.

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

http://www.mywebsite.com/auth/login?ReturnUrl=/

, сначала идет этот маршрут, а затем выдает ошибку 404, поскольку у меня нет действия с индексом.Как вы можете видеть, я настроил маршруты по умолчанию для использования метода действия входа в систему, но этот маршрут все еще сохраняется.

enter image description here

У меня есть следующие конфигурации маршрутов:

AuthAreaRegistration

public class AuthAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Auth";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "login",
            "auth/login/{*returnPath}",
            new { controller = "Auth", action = "LogIn", id = UrlParameter.Optional }
        );

        context.MapRoute(
            "Auth_default",
            "Auth/{controller}/{action}/{id}",
            new { controller = "Auth", action = "LogIn", id = "" }
        );
    }
}

Global.asax (с использованием шаблонов MVC T4)

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Home",
            "{controller}/{action}/{id}",
            MVC.Home.Index(), new { id = UrlParameter.Optional },
            new string[] { "MyNamespace.WebUI.Controllers" }

        );

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            MVC.Home.Index(), new { id = UrlParameter.Optional },
            new string[] { "MyNamespace.WebUI.Controllers" }
        );
    }

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Я не хотел бы отвечать на свой вопрос, но после дня, когда я пытался решить эту проблему, я решил опубликовать ответ на тот случай, если у кого-то еще возникнет такая же проблема.

Оказывается, мое приложение удерживало старые маршруты и вставляло их в мою коллекцию маршрутов. Я удалил все файлы из папки bin и перестроил свое решение, и все заработало как надо.

Я ответил на этот вопрос более подробно здесь:

Создает ли ASP.NET MVC маршруты по умолчанию для областей

0 голосов
/ 31 января 2011

Я думаю, что проблема в том, что у вас есть область с именем Auth и контроллер с именем Auth внеобластей.

MVC сначала попытается сопоставить ваш URL с областью аутентификации, но вы действительно хотите, чтобы он попадал на ваш контроллер аутентификации за пределами области.

Лучший способ решить эту проблему - это избежать двусмысленных названий контроллеров / областей.

...