ASP.Net MVC отображение маршрутов - PullRequest
13 голосов
/ 15 августа 2008

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

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

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

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

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

Ответы [ 5 ]

6 голосов
/ 15 августа 2008

Я только что ответил на свой вопрос. У меня были маршруты в обратном направлении (по умолчанию было выше страницы). Ниже приведен правильный порядок. Таким образом, возникает следующий вопрос ... как маршрут «По умолчанию» соответствует (я предполагаю, что они используют регулярные выражения здесь) маршруту «Страница»?

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
        );
6 голосов
/ 15 августа 2008

Я только что ответил на свой вопрос. я имел маршруты в обратном направлении (по умолчанию было выше страницы).

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

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

Маршрут по умолчанию совпадает на основе того, что мы называем «Соглашение по конфигурации». Скотт Гатри хорошо объясняет это в своем первом посте в блоге на ASP.NET MVC. Я рекомендую вам прочитать его, а также другие его посты. Имейте в виду, что они были опубликованы на основе первого ОСАГО, и структура изменилась. Вы также можете найти веб-трансляцию на ASP.NET MVC на сайте asp.net Скотта Хансельмана.

1 голос
/ 15 августа 2008

На одном из скриншотов Робк Конери в магазине MVC он сталкивается именно с этой проблемой. Если хотите, это около 23 минут.

0 голосов
/ 30 января 2011
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

0 голосов
/ 15 августа 2008

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

Вот мой маршрут в Global.asax.cs

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

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

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class PageController : Controller
    {
        public void Index()
        {
            Response.Write("Page.aspx content.");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...