рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ URL MVC рд░реВрдЯрд┐рдВрдЧ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдорд╛рдирдХ рд░реВрдЯрд┐рдВрдЧ рд╣реИ:
routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional );
рдпрд╣ рдПрдХ рдирд┐рдпрдо рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдХрд╛рд░реНрд░рд╡рд╛рдИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХрдИ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦреЗрдВрдЧреЗ- param1 / param2 / param3 /ред рдХрднреА-рдХрднреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реАрдПрдордПрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, url рднрд╛рдЧ рдХреЛ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
routes.MapRoute( "Default", "{controller}/{action}/{*url}", new { controller = "Content", action = "Home", url = UrlParameter.Optional });
рдпрд╣ рдирд┐рдпрдо рдПрдХреНрд╢рди рдФрд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдХреА рдХреЛ url рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИред
рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, Application_Start () рдкрджреНрдзрддрд┐ рдореЗрдВ Global.asax рдлрд╝рд╛рдЗрд▓ рдореЗрдВред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬреНрдЮрд╛рди рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдореЗрд░реЗ рд▓реЗрдЦ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрд░реЛрдз рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реИ рдФрд░ рджреЗрдЦрдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрд╡реЗрджрди рдпреВрдЖрд░рдПрд▓ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред
1. MVC рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдирд╛редMVC рдореЗрдВ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВрдбрд▓рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
(MSDN рдкрд░ рдЖрдзрд╛рд░рд┐рдд)тАв MvcHandlerред рдпрд╣ рд╣реИрдВрдбрд▓рд░ MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП ASP.NET рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ MVC рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░рдЦрд╛рдиреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджреНрдпрдкрд┐ MHHandler IHttpHandler рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд┐рд▓рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, .mvc рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╛рд╕ рдмрд┐рдирд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред (рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдПрдХ RequestContext рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ)ред
тАв MvcRouteHandlerред рдпрд╣ рд╡рд░реНрдЧ IRouteHandler рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ ASP.NET рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред MvcRouteHandler рд╡рд░реНрдЧ MvcHandler рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рд░реНрдЧ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред MvcRouteHandler рдЙрджрд╛рд╣рд░рдг MapRoute рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рд╣реИред рдЬрдм MvcRouteHandler рд╡рд░реНрдЧ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд░реНрдЧ рд╡рд░реНрддрдорд╛рди RequestConportxt рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ MvcHandler рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ MvcHandler рдХреЗ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
тАв MvcHttpHandlerред рдЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реВрдЯрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рд╕реАрдзреЗ рд╣реИрдВрдбрд▓рд░ рдореИрдкрд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдЬреИрд╕реЗред Mvc, рдХреЛ рд╕реАрдзреЗ MVC рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдореИрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, MvcHttpHandler рдирд┐рдпрдорд┐рдд ASP.NET рд░реВрдЯрд┐рдВрдЧ (MvcRouteHandler рдФрд░ MvcHandler рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП) рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред рдпрд╣ рд╣реИрдВрдбрд▓рд░ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ UrlRoutModule рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реИредрдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ?
- рдПрдХред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг (рдереНрд░реЗрдбред CurrentThread.CurrentUICulture рдФрд░ Thread.CurrentThread.CurrentCulture)ред
- рдЦред рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдорд╛рд░реНрдЧ рдХреЗ рд▓рд┐рдПред
- рд╕реАред рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреАрдмреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛)ред
MvcRouteHandler рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
public class CustomRouteHandler : MvcRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) {
Application_Start () рд╡рд┐рдзрд┐ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд░реНрдЧ рдореЗрдВ CustomRouteHandler рдХреЛ рдЖрд░рдореНрдн рдХрд░реЗрдВ
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); var route = routes.MapRoute( "Default",
2. рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЪрдпрди рдФрд░ рдирд┐рд░реНрдорд╛рдгрдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╡рд░реНрдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ IControllerFactory рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
public interface IControllerFactory { IController CreateController(RequestContext requestContext, string controllerName); SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName); void ReleaseController(IController controller); }
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░рдЦрд╛рдирд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ DefaultControllerFactory рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдПрдХ IController CreateController (RequestContext requestContext, string рдирд┐рдпрдВрддреНрд░рдХ рдирд╛рдо) рд╣реИред рдиреАрдЪреЗ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
public class MyControllerFactory : DefaultControllerFactory { public override IController CreateController(RequestContext requestContext, string controllerName) {
рд╡реИрд╕реЗ, рдСрдЯреЛрдлреЗрдХ, рдирд┐рдирдЬреЗрдХреНрдЯ, рдпреВрдирд┐рдЯреА рд╕рднреА рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЧреНрд▓реЛрдмрд▓ рдХреНрд▓рд╛рд╕, рдПрдкреНрд▓реАрдХреЗрд╢рди_рд╕реНрдЯрд╛рд░реНрдЯ () рд╡рд┐рдзрд┐ рдореЗрдВ рднреА рд╣реЛрддрд╛ рд╣реИ
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
3. рдХреНрд░рд┐рдпрд╛рдирд┐рдпрдВрддреНрд░рдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, IController.Execute () рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд╖реНрдкрд╛рджрди () рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рдирдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдореЗрдВ, ActionInvoker рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рддрдм рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
public class CustomActionInvoker : IActionInvoker { public bool InvokeAction(ControllerContext context, string actionName) {
рдЖрдк рдЗрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдХреЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
public class CustomActionInvokerController : Controller { public CustomActionInvokerController() { this.ActionInvoker = new CustomActionInvoker(); } }
ActionInvoker рдПрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ActionMethodSelectorAttribute рдФрд░ FilterAttribute
(AuthorizeAttribute, HandleErrorAttibute
, ValidateAntiForgeryToken.ttribute, ValidateInputAttribute) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рднреА рдЬрд╛рдВрдЪрддрд╛ рд╣реИред рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдХреНрд╢рди рд╕реЗрд▓реЗрдХреНрдЯрд░реНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░реЗрдВ
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public abstract class ActionMethodSelectorAttribute : Attribute { public abstract bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo); }
4. рдмрд╛рдБрдзрдиреЗ рд╡рд╛рд▓рд╛рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдорд╡реАрд╕реА рддрдВрддреНрд░ рд╕рд░рд▓рддрдо рдорд╛рдкрджрдВрдбреЛрдВ (рдЗрдВрдЯ, рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдПрдХ рдмрд▓реНрдХрд┐ рд╡рд┐рджреЗрд╢реА рд╡рд░реНрдЧ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдорд╛рдирдХ рдмрд╛рдЗрдВрдбрд░ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рдмрд╛рдЗрдВрдбрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ DefaultModelBinder рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред
public class CustomModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдЕрдкрдиреЗ ModelBinder рдХреЛ рд╕реАрдзреЗ рдореЙрдбрд▓ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рдеред
[ModelBinder(typeof(CustomModelBinder))]
рдпрд╛ рдЧреНрд▓реЛрдмрд▓ рдХреНрд▓рд╛рд╕ рдореЗрдВ, Application_Start () рд╡рд┐рдзрд┐ред
ModelBinders.Binders.Add(typeof(CustomTypeModel), new CustomModelBinder());
5 рдХреНрд░рд┐рдпрд╛рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рдж, рд░рд┐рдЯрд░реНрди рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЧрдИ рд╣реИ редResResult ()ред рдпрд╣ View (), PartialView (), JsonResult (), FileResult (), EmptyResult () рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рд╕реВрдЪреА рдХреЛ ActionResult () рдХреЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдФрд░ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ ActionResult рд╡рд░реНрдЧ рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рд╢реВрдиреНрдп ExecuteResult рд╡рд┐рдзрд┐ (рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрджрд░реНрдн) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ
public class CustomResult : ActionResult { public override void ExecuteResult(ControllerContext context) {
рджреЗрдЦрдиреЗ () рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ * .cshtml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реАрдзреЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рднреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, WebViewPage рд╡рд░реНрдЧ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВред
public abstract class CustomView : WebViewPage { public string HelloWordPrint() { return "Hello Word"; } }
RazorView рдореЗрдВ рд╣реА рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
@inherits CustomView
рдЕрдм рдЖрдк рд╡реНрдпреВ рдореЗрдВ рдирдП рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖рд╡рд╣ рд╕рдм рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо рдПрдорд╡реАрд╕реА рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░реЗ, рд╣рдордиреЗ рдЬрд╛рдВрдЪ рдХреА рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ MVC3 рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреА рдкреВрд░реА рддрд╕реНрд╡реАрд░ рд╣реИред