Числовой корневой маршрут по умолчанию в MVC - PullRequest
1 голос
/ 13 февраля 2012

У меня есть веб-сайт, и я хочу

/22         Redirect to 
/user/22

и т. Д. И т. Д., Однако есть другие представления и контроллеры mvc, и все они работают нормально, я использовал следующий маршрут, но он не работает.

routes.MapRoute(
    "Final",
    "{id}",
    new { controller = "Root", action = "Index"},
    new { id = @"\d+" },
    new string[] { "MyWebApp.Controllers" }
);

В идеале этот маршрут должен работать, только если фрагмент URL числовой.

У меня также есть RootController в пространстве имен MyWebApp.Controllers.И все, что он делает, это перенаправляет на другую страницу, как показано ниже:

public class RootController : Controller
{
    public ActionResult Index(long id) {
        return RedirectPermanent("/user/" + id);
    }
}

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

Примечание: URL / user / 22 и т. Д. Работают правильно, проблема возникает только с этим корневым URL.

1 Ответ

2 голосов
/ 13 февраля 2012

Я проверил этот маршрут:

        routes.MapRoute(
            "Final",
            "{id}",
            new { controller = "Root", action = "Index" },
            new { id = @"\d+" }
        );

Он работает так, как должен.Но если у вас возникла проблема с этим, я предполагаю, что ваш желаемый URL соответствует другому маршруту до него.Поместите этот маршрут в качестве первого и посмотрите, исправляет ли он.

Например, если ваши маршруты выглядят так:

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "Final",
            "{id}",
            new { controller = "Root", action = "Index" },
            new { id = @"\d+" }
        );

Вы получите ресурс 404, не найденный.Но если вы переключите их так:

        routes.MapRoute(
            "Final",
            "{id}",
            new { controller = "Root", action = "Index" },
            new { id = @"\d+" }
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

Тогда вы получите желаемую маршрутизацию с запросом, подобным /1234.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...