Как сделать MapRoute?Если http://abc.com/Home перейти к Home Controller, иначе перейдите к Misc Controller - PullRequest
1 голос
/ 19 октября 2010

У меня есть три контроллера, Home, Blog и Misc.

Когда я набираю mydomain.com/Home в адресной строке, браузер отображает представление для домашнего контроллера.

Когда я набираю mydomain.com/Blog в адресной строке, браузер отображает представление для контроллера блога.

А когда я набираю mydomain.com/anything (не Home или Blog), браузер отображаетпредставление для контроллера разного.

Как отобразить маршрут для вышеупомянутого?

Я имею в виду, что когда вы вводите что-то отличное от / Home или / Blogнапример / Test, / Book, / Book / Index, / xxx / yyy / zzz / aaa, / etc / etc / etc,тогда мой Misc Controller будет запущен

routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);


routes.MapRoute(
     "Misc",
     "{*id}",
      new { controller = "Misc", action = "Index", id = "" },
;

1 Ответ

0 голосов
/ 21 октября 2010

Чтобы перехватить «другие» записи, вам необходимо переопределить фабрику контроллеров, которая определяет, какой контроллер использовать:

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
    try
    {
        return base.GetControllerInstance(requestContext, controllerType);
    }

    catch (HttpException ex)
    {
        int httpCode = ex.GetHttpCode();
        if(httpCode == (int)HttpStatusCode.NotFound)
        {
            IController controller = new MiscController();
            ((MiscController)controller).DefaultAction(); // whatever action you want to invoke
            return controller;
        }
        else
        {
            throw ex;
        }
    }
}

Затем зарегистрировать эту фабрику контроллеров при запуске Global.asax.

...