Как определить приоритеты контроллеров по пространствам имен?



Деңгей:

Как использовать необязательные сегменты маршрутизации для обеспечения разделения ответственности?

Қолданбаның әдепкі URL-мекенжайын сұрауда, қате пайда болу себебі - ол біз анықтаған бағытқа сәйкес келмеуі. Әдепкі URL мекен-жайы маршруттау жүйесінде ~ / деп көрсетілген және бұл жолда сегменттер жоқ, олар қарапайым маршрут үлгілері арқылы анықталған контроллерге және әрекет айнымалыларына сәйкес келеді. Бұдан бұрын түсіндірілгендей, URL үлгілері консервативті болып табылады, себебі олар тек көрсетілген сегменттер саны бар URL мекенжайларына сәйкес болады.Бұл әдепкі мінез-құлық және бұл әрекетті өзгертудің бір жолы әдепкі мәндерді пайдалану болып табылады. URL мекенжайында мәнге сәйкес келетін сегмент болмаса, әдепкі мән қолданылады.

Листинг 1:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing;

namespace UrlsAndRoutes {   

public class RouteConfig {      

 public static void RegisterRoutes(RouteCollection routes) {          

 routes.MapRoute("MyRoute", "{controller}/{action}", new { action = "Index" });      

 } 

} }

Әдепкі мәндер анонимдік түрдегі сипаттар ретінде беріледі. Листинг 1-де, айнымалы үшін индексті әдепкі мән бердім. Бұл маршрут бұрынғыдай барлық екі бөліктік URL-мекенжайларға сәйкес келеді. Мысалы, http://mydomain.com/Home/Index URL мекенжайы сұралса, маршрут Home параметрін контроллер мен Индекс үшін мән ретінде әрекет үшін мән ретінде шығарады. Әрекет сегменті үшін әдепкі мән берілсе, маршрут бірыңғай URL мекенжайларына сәйкес келеді. Бір мәнді URL мекенжайын өңдеген кезде, маршруттау жүйесі контроллер мәнін жалғыз URL сегментінен шығарып, әрекет айнымалысы үшін әдепкі мәнді пайдаланады. Осылайша, http://mydomain.com/Home URL мекенжайын сұрай аламын және Home controller ішіндегі Индекс әрекеті әдісін шақыра аламын. Әрі қарай аламын және әрекетті және контроллерді анықтау үшін әдепкі мәндерге сүйене отырып, кез-келген сегмент айнымалысы жоқ URL мекенжайларын анықтай аламын.

Мысал ретінде, 2-листингіне екі сегменттің әдепкі мәндерін беру арқылы бағдарламаның түбірлік URL-мекенжайын қалай көрсеткенімді көрсетеді.

Листинг 2

using System; using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing;

namespace UrlsAndRoutes {  

 public class RouteConfig {      

 public static void RegisterRoutes(RouteCollection routes) {           

routes.MapRoute("MyRoute", "{controller}/{action}", new { controller = "Home", action = "Index" });   } } }

 

 

Как определить маршрут переменной длины?Для чего он нужен?

MVC 4 те Global.asax.cs файлына арналған бастапқы конфигурация класс ретінде біріктіріліпApp_Start папкасына сақталынған. Сосын осы класстар Global.asax.cs файлынан шақырылады.

using System.Web.Mvc;

using System.Web.Routing;

Namespace MvcEmptyApp

{

Public class MvcApplication : System.Web.HttpApplication

{

Protected void Application_Start()

{

AreaRegistration.RegisterAllAreas();

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

RouteConfig.RegisterRoutes(RouteTable.Routes);

}

}

}

App_Start папкасында орналасқан RouteConfig.cs файлын ашамыз. Бұл файлдың ішінде

Машрутизатордың анықтамасы орналасқан:

using System.Web.Mvc;

using System.Web.Routing;

Namespace MvcEmptyApp

{

Public class RouteConfig

{

Public static void RegisterRoutes(RouteCollection routes)

{

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

Routes.MapHttpRoute(

name: "DefaultApi",

routeTemplate: "api/{controller}/{id}",

defaults: new { id = RouteParameter.Optional }

);

Routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}",

defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

);

} }}

RouteConfig.cs файлының ішінде жазылған кодты түсіндірсек

Бірінші routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); қатарының жұмысы

*.axd (WebResource.axd). типінде келген кейбір файлдарға запрос жіберуді тоқтатады.

Келесі routes.MapHttpRoute мен routes.MapRoute қатарлары маршрут жолын көрсетеді.

Бұл екі қатардың айырымашылығы routes.MapRoute арқылы контроллерге маршрут тағайындау ал екінші routes.MapHttpRoute Web API дің кейбір ресурстарына марщрут орнатуды қамтамасыздандырады.

MapRoute методы запрос пен маршруттың сәйкес қойылуы үшін қолданылады.

Defaults параметрі маршруттың алғашқы анықтамасын анықтайды.

Как определить приоритеты контроллеров по пространствам имен?

Міндеттері зауыт және ол қалай жұмыс істейтін қандай көрсетудің ең тиімді тәсілі контроллер болып табылады, өйткені біз, теңшелетін контроллері фабрикасы құрамыз. Алайда, көп жағдайда, кіріктірілген класс бақылаушылар зауытта DefaultControllerFactory құрылады. Сontroller - де Бағыттау жүйесінен сұрау қабылдау, осы зауыт сипаттың мәнін табу үшін маршруттау деректер көрінеді, және мынадай өлшемдерге сәйкес өтініш класста табуға тырысады:

класс таңбаланған болуы тиіс public;

класс (белгіленген емес нақты болуы тиіс abstract);

класс рулық (қабылдауға тиіс емес рулық ) параметрлерін;

класс атауы аяқтау керек Controller;

класс интерфейсін жүзеге асыру керек IController.

классDefaultControllerFactory, ол сұрау алынған сайын іздеудің қажеті жоқ, сондықтан, сіздің өтінімде сынып тізімін сақтайды. тиістіклассы

бар болса, өз жұмысын аяқтайды. бірде-бір жарамды емес контроллері болса, сұрау одан әрі өңдеу мүмкін емес.

класс үшін екенін ескеру керек. DefaultControllerFactory келісімнің олар үшін егіледі, себебі , конфигурация файлында контроллерді тіркеу қажет емес. Бәрі - олардың зауыттық іздейді онда өлшемдерге сай сабақтарды жасауы болып табылады.

 контроллері зауыттық бейне(view) жасау қажет болса, онда сіз стандартты зауыттық параметрлерін өзгерту немесе кейбір әдістері қайта анықтауыңыз қажет.


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

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






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