Mvc如何重写控制器工厂!
2018-01-05 09:30
267 查看
直接上代码,主要看红色文字,在这里根据自己项目需求获取到控制器的type。
重写必须继承DefaultControllerFactory,然后在启动时候注册,注册方式,可以在global文件的Application_Start()中注册,代码如下:
也可以通过特性自启动,代码如下:
public class CustomControllerFactory : DefaultControllerFactory { /// <summary> /// 根据控制器名称及请求信息获得控制器类型。 /// </summary> /// <param name="requestContext">请求信息</param> /// <param name="controllerName">控制器名称。</param> /// <returns>控制器类型。</returns> protected override Type GetControllerType(RequestContext requestContext, string controllerName) { Type controllerType = null; //路由中包含pluginName才重写, 反射动态加载的控制器必须重写控制器工厂。 if (requestContext.RouteData.Values.ContainsKey("pluginName")) { string pluginName = requestContext.RouteData.Values["pluginName"].ToString(); controllerType = this.GetControllerType(pluginName, controllerName); } else { controllerType = base.GetControllerType(requestContext, controllerName); if (controllerType != null) { if (requestContext.RouteData.DataTokens.ContainsKey("Namespaces")) { string[] nameSpaces = (string[])requestContext.RouteData.DataTokens["Namespaces"]; //把默认优先级改为直接限制 if (!nameSpaces.Contains(controllerType.Namespace)) { return null; } } } } return controllerType; } .....
重写必须继承DefaultControllerFactory,然后在启动时候注册,注册方式,可以在global文件的Application_Start()中注册,代码如下:
ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory()); //重新注册控制器工厂
也可以通过特性自启动,代码如下:
[assembly: System.Web.PreApplicationStartMethod(typeof(PageAdmin.Plugin.Bootstrapper), "Initialize")] namespace PageAdmin.Plugin { /// <summary> /// 引导程序。 /// </summary> public static class Bootstrapper { /// <summary> /// 初始化。 /// </summary> public static void Initialize() { //注册插件控制器工厂。 ControllerBuilder.Current.SetControllerFactory(new PluginControllerFactory()); ............... } } }
相关文章推荐
- WebApi 插件式构建方案:重写的控制器获取工厂
- mvc 如何查找控制器类
- MVC中如何获取控制器的名称
- ASP.NET MVC 4源码分析之如何定位控制器
- mvc Web api 如何在控制器中调用
- Mvc中如何根据控制器来创建试图?
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
- asp.net core mvc中如何把二级域名绑定到特定的控制器上
- MVC扩展控制器工厂,通过实现IControllerFactory,根据action名称生成不同的Controller
- MVC中的扩展点(三)控制器工厂
- magento如何重写控制器
- MVC在filter中如何获取控制器名称和Action名称
- 说明ASP.NET MVC Http请求是如何到达控制器操作的!!!
- asp.net core mvc中如何把二级域名绑定到特定的控制器上
- MVC如何避免控制器方法接收到的值不能被转换为参数类型
- Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则
- MVC中的扩展点(二)控制器工厂
- Asp.net MVC中如何获取控制器的名称
- ASP.NET MVC 4源码分析之如何定位控制器