Вопрос

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

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

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

Контроллер для пути «/Page.aspx» не найден или он не реализует интерфейс IController.Имя параметра:Тип контроллера

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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
        );

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

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

Вот мой маршрут в 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.");
        }
    }
}
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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top