Сведения о вопросе

Martincow

15:22, 7th August, 2020

Теги

c#   asp.net   asp.net-mvc   routing    

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

Просмотров: 418   Ответов: 5

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

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

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

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

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



  Сведения об ответе

PIRLO

20:31, 29th August, 2020

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

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


  Сведения об ответе

screen

11:42, 20th August, 2020

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

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

Поэтому возникает следующий вопрос... как совпадает маршрут "Default" (I предположим, что они используют регулярные выражения здесь) маршрут "Page"?

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


  Сведения об ответе

9090

09:53, 2nd August, 2020

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


  Сведения об ответе

PAGE

21:06, 1st October, 2020

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


  Сведения об ответе

lourence

23:42, 6th August, 2020

Не знаю, как выглядит ваш контроллер, ошибка, кажется, указывает на то, что он не может найти контроллер. Вы унаследовали от контроллера после создания класса 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.");
        }
    }
}


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться