routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional );
routes.MapRoute( "Default", "{controller}/{action}/{*url}", new { controller = "Content", action = "Home", url = UrlParameter.Optional });
public class CustomRouteHandler : MvcRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { //TODO: something return base.GetHttpHandler(requestContext); } }
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); var route = routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); route.RouteHandler = new CustomRouteHandler();
public interface IControllerFactory { IController CreateController(RequestContext requestContext, string controllerName); SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName); void ReleaseController(IController controller); }
public class MyControllerFactory : DefaultControllerFactory { public override IController CreateController(RequestContext requestContext, string controllerName) { //TODO: something Type controllerType = this.GetControllerType(requestContext, controllerName); return this.GetControllerInstance(requestContext, controllerType); } public override void ReleaseController(IController controller) { //TODO: something var disposable = controller as IDisposable; if (disposable != null) { disposable.Dispose(); } } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { //TODO: something try { return (IController)Activator.CreateInstance(controllerType); } catch (Exception exception) { throw new InvalidOperationException(); } } }
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
public class CustomActionInvoker : IActionInvoker { public bool InvokeAction(ControllerContext context, string actionName) { //TODO: invoke Action // if action was found // return true return false; } }
public class CustomActionInvokerController : Controller { public CustomActionInvokerController() { this.ActionInvoker = new CustomActionInvoker(); } }
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public abstract class ActionMethodSelectorAttribute : Attribute { public abstract bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo); }
public class CustomModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { //TODO: something return base.BindModel(controllerContext, bindingContext); } protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) { //TODO: something return base.CreateModel(controllerContext, bindingContext, modelType); } protected override System.ComponentModel.PropertyDescriptorCollection GetModelProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) { //TODO: something return base.GetModelProperties(controllerContext, bindingContext); } protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) { //TODO: something base.BindProperty(controllerContext, bindingContext, propertyDescriptor); } protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) { return base.GetPropertyValue(controllerContext, bindingContext, propertyDescriptor, propertyBinder); } protected override ICustomTypeDescriptor GetTypeDescriptor(ControllerContext controllerContext, ModelBindingContext bindingContext) { //TODO: something return base.GetTypeDescriptor(controllerContext, bindingContext); } protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) { base.OnModelUpdated(controllerContext, bindingContext); } protected override bool OnModelUpdating(ControllerContext controllerContext, ModelBindingContext bindingContext) { //TODO: something return base.OnModelUpdating(controllerContext, bindingContext); } protected override void OnPropertyValidated(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) { base.OnPropertyValidated(controllerContext, bindingContext, propertyDescriptor, value); } protected override bool OnPropertyValidating(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) { //TODO: something return base.OnPropertyValidating(controllerContext, bindingContext, propertyDescriptor, value); } protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) { //TODO: something base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value); } }
[ModelBinder(typeof(CustomModelBinder))]
ModelBinders.Binders.Add(typeof(CustomTypeModel), new CustomModelBinder());
public class CustomResult : ActionResult { public override void ExecuteResult(ControllerContext context) { //TODO: something } }
public abstract class CustomView : WebViewPage { public string HelloWordPrint() { return "Hello Word"; } }
@inherits CustomView
Source: https://habr.com/ru/post/136834/
All Articles