ASP.Net отображение маршрута MVC

Я новичок в MVC (и ASP.Net routing). Я пытаюсь сопоставить *.aspxс контроллером под названием PageController.

routes.MapRoute(
   "Page",
   "{name}.aspx",
   new { controller = "Page", action = "Index", id = "" }
);

Не будет ли код выше карты *.aspx PageController? Когда я запускаю это и набираю любой .aspx страница я получаю следующую ошибку:

Контроллер для path ‘ / Page.aspx не удалось найти или не реализует интерфейс IController.
Имя параметра: controllerType

Есть что-то, чего я здесь не делаю?

5 ответов

  1. Не уверен, как выглядит ваш контроллер, ошибка, кажется, указывает на то, что он не может найти контроллер. Вы унаследовали off of Controller после создания класса PageController? Находится ли PageController в каталоге Controller?

    Вот мой маршрут в мире.asax.цезий

    routes.MapRoute(
        "Page", 
        "{Page}.aspx", 
        new { controller = "Page", action = "Index", id = "" }
    );
    

    Вот мой контроллер, который находится в папке контроллеры:

    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        public class PageController : Controller
        {
            public void Index()
            {
                Response.Write("Page.aspx content.");
            }
        }
    }
    
  2. Я только что ответил на свой вопрос. У меня были маршруты назад (по умолчанию выше страницы). Ниже приведен правильный порядок. Поэтому возникает следующий вопрос… как маршрут » по умолчанию «совпадает (я предполагаю, что здесь используются регулярные выражения) с маршрутом» страница»?

    routes.MapRoute(
                "Page",
                "{Name}.aspx",
                new { controller = "Page", action = "Display", id = "" }
            );
    
            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
    
  3. Я только что ответил на свой вопрос. Я
    маршруты в обратном направлении (по умолчанию
    над страницей).

    Да, вы должны поместить все пользовательские маршруты выше маршрута по умолчанию.

    Поэтому возникает следующий вопрос…
    как совпадает маршрут » по умолчанию «(I
    предположим, они используют регулярные выражения
    здесь)» Страница » маршрута?

    Маршрут по умолчанию соответствует тому, что мы называем соглашением по конфигурации. Скотт Гатри хорошо объясняет это в своем первом блоге ASP.NET MVC. Я рекомендую вам прочитать его, а также другие его сообщения. Имейте в виду, что они были размещены на основе первого CTP, и структура изменилась. Вы также можете найти web cast on ASP.NET MVC на asp.net сайт Scott Hanselman.

  4. На одном из показов MVC Роба Конери он сталкивается с этой точной проблемой. Это примерно на 23-минутной отметке, если вам интересно.

  5. public class AspxRouteConstraint : IRouteConstraint
    {
        #region IRouteConstraint Members
    
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            return values["aspx"].ToString().EndsWith(".aspx");
        }
    
        #endregion
    }
    

    Регистрация маршрута для всех aspx

      routes.MapRoute("all", 
                    "{*aspx}",//catch all url 
                    new { Controller = "Page", Action = "index" }, 
                    new AspxRouteConstraint() //return true when the url is end with ".aspx"
                   );
    

    И вы можете проверить маршруты MvcRouteVisualizer