Namespace ControllerExtensibility



{

Public class MvcApplication : System.Web.HttpApplication

{

Protected void Application_Start()

 {

AreaRegistration.RegisterAllAreas();

WebApiConfig.Register(GlobalConfiguration.Configuration);

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

RouteConfig.RegisterRoutes(RouteTable.Routes);

ControllerBuilder.Current.DefaultNamespaces.Add("MyControllerNamespace");

ControllerBuilder.Current.DefaultNamespaces.Add("MyProject.*");

}

}

}

Для чего используется ограничение маршрутов? Приведите пример использования ограничения марщрута.

Одна из реально удобных вещей в расширяемости ASP.NETMVC — это возможность накладывать ограничения и писать собственные ограничения для ваших маршрутов. Я склонен считать что добавление ограничей маршрутов(когда это возможно) — это отличная практика. Почему бы когда невалидные значения маршрута передаются в ваше приложение не позволить фреймворку ASP.NETMVC и модулю маршрутов самим заняться валидацией?
Ограничения маршрута
Использование ограничения маршрутов в ASP.NETMVC — это часть самого процесса маппинга маршрутов. Возьмём к качестве примера электронный магазин, который использует ID продукта в своих маршрутах чтобы показывать продукты в каталоге. Т.к. ID должен быть целочисленным в данном случае и может состоять только из 1-5 цифр, давайте укажем это как ограничение маршрута, так чтобы только верные ID-шники принимались в маршруте:

routes.MapRoute("Product", "Product/{id}",
new { controller = "Products", action = "Details" },
new { id = @"\d{1,5}" }); // Constraint
* Thissourcecodewashighlightedwith SourceCodeHighlighter.

Обратите внимание на то как легко указать что id это диапазон от 1 до 5 цифр с помощью регулярного выражения "\d{1,5}". Теперь, если кто-то введёт неверный маршрут, такой как:
/Product/abc
Он получит страницу с ошибкой(ксли не задана своя страница ошибок — стандартную «ресурс не найден»/«theresourcecannotbefound.»).

Как обойти систему маршрутизации?

RouteCollection класының IgnoreRoute әдісі маршрутизацияның жүйесін аттап өтуге мүмкінді береді:

public static void RegisterRoutes(RouteCollection routes) {

routes.RouteExistingFiles = true;

routes.IgnoreRoute("Content/{filename}.html");

routes.MapRoute("DiskFile", "Content/StaticContent.html",

new {

controller = "Customer",

action = "List",

});

routes.MapRoute("ChromeRoute", "{*catchall}",

new { controller = "Home", action = "Index" },

new {

customConstraint = new UserAgentConstraint("Chrome")

},

new[] { "UrlsAndRoutes.AdditionalControllers" });

routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",

new { controller = "Home", action = "Index",

id = UrlParameter.Optional },

new[] { "URLsAndRoutes.Controllers" });

}

Біз URL қатарымен сәкестендіру үшін {filename} секілді сегментті айнымалыларды қолдана аламыз. Бұл жағдайда URL паттерн кез келген екі сегментті URL-ге сәйкес болады, мұнда Content бірінші сегмент, ал .html сегмент кеңейтілуі. IgnoreRoute әдісі RouteCollection-да жазба құрады, мұнда роуттың өңдеушісі MvcRouteHandler емес, StopRoutingHandler класс экземпляры болады. Маршрутизация жүйесі бұл өңдеушіні жақсы табады. Егер IgnoreRoute әдісіне берілген URL паттерн, сәйкестікті тапса, онда келесі роуттардың ешқайсысы бағаланбайды, яғни қарапайым роуттағыдай. Бұдан кейін ескере кететін нәрсе, IgnoreRoute әдісін шақыратын жер өте маңызды

Как использовать систему маршрутизации для генерирования исходящих URL?

Почти в каждом MVC приложении вы хотите позволить пользователю перемещаться от одного представления к другому, и это, как правило, основывается на в том, что ссылка включается в первое представление и нацеливается на метод действия, который генерирует второе представление.

Так заманчиво просто добавить статический элемент a, атрибут href которого нацелен на метод действия:

<a href="/Home/CustomVariable">This is an outgoing URL</a>

Этот HTML элемент создает ссылку, которая будет обработана как запрос для метода действия CustomVariable контроллера Home, с дополнительной переменной сегмента Hello. Определенные вручную URL, как этот, быстро и просто создавать. Они также чрезвычайно опасны, и вам нужно будет ломать все жестко закодированные URL при изменении URL схемы вашего приложения. Затем вам нужно будет пройти по всем представлениям в приложении и обновить все ссылки для контроллеров и методов действий: это утомительный, подверженный ошибкам и плохо тестируемый процесс.

Гораздо лучшим вариантом является использование системы маршрутизации для генерации исходящих URL, которая гарантирует, что URL схема используется для получения URL динамически, таким способом, который гарантированно отражает URL схему приложения.

Использование роутинговой системы для генерации исходящих URLСамый простой способ генерации исходящих URL в представлении заключается в вызове вспомогательного метода Html.ActionLink, как показано на листинге 14-2, где продемонстрированы дополнения, которые мы внесли в файл представления /Views/Shared/ActionName.cshtml.


Дата добавления: 2018-02-15; просмотров: 226; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!