C# 在到达控制器之前执行代码';s代码
我的意图是创建一个主控制器,根据URL参数决定将使用什么配置C# 在到达控制器之前执行代码';s代码,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我的意图是创建一个主控制器,根据URL参数决定将使用什么配置 我的第一个想法是创建一个主控制器。所有对服务器的请求都将被重定向到此控制器,然后,此主控制器将决定使用哪个控制器,并重定向到它。问题是这样做会产生太多的请求 我的第二个想法是在每个控制器的开头调用一个函数,必要时重定向到正确的控制器。问题是一样的:它会增加请求的数量 具体示例:假设我有以下URL: http:\\myapp.com\?showController1=true http:\\myapp.com\abcd?showCont
homeController
或abcdController
为了实现这一点,在到达witch控制器之前,我需要根据url参数决定调用哪个控制器。但是我想尽量减少服务器和浏览器之间的请求数量
不需要额外请求就可以实现此功能?在问题编辑之后,我发现很可能只需指定正确的路由即可解决此问题 路由发生在将处理请求的控制器被选择为实例之前 路由的结果是选择一个控制器、一个操作,并从URL获取参数。因此,指定正确的路由将允许您以非侵入性的方式选择rigth控制器(原始答案就是这样做的)。但是,如果您将参数指定为URL段,而不是查询字符串参数,那么这只会更有效。如果没有,回到原来的答案 原始答案 虽然问题不是很清楚,但看起来您希望根据URL选择特定的控制器。一种方法是实现自己的,并将其注册为ASP.NET MVC控制器工厂,如下所示:
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
在实现自定义的MyControllerFactory时,您必须实现以下成员:
:使用指定的请求上下文创建指定的控制器CreateController(RequestContext,String)
:获取控制器的会话行为GetControllerSessionBehavior(RequestContext,String)
:释放指定的控制器释放控制器(IController)
HttpContext
,并返回一个实例控制器
一般来说,这样做不是一个好主意,因为MVC会“按预期”停止工作,而稍后维护此项目的人员将很难理解正在发生的事情。您可能希望更多地了解路由是如何工作的,并覆盖它,这听起来更像是你想要实现的改变。从你的基础控制器(masterController)继承并在那里进行检查。或者应用自定义过滤器并覆盖OnActionExecutingPlease,更具体一些。“决定将使用什么配置”的确切含义是什么?为什么说了这句话后你会说:“重定向到正确的控制器”?如果你能准确地解释你的意图,什么是配置,url看起来如何,参数在哪里,参数改变时会发生什么等等,我们很可能会帮助你。我做了一些改变,试图为问题带来更多的信息。非常感谢你的回答并回顾我的问题。最初的答案非常适合我的问题。