Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在到达控制器之前执行代码';s代码_C#_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 在到达控制器之前执行代码';s代码

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

我的意图是创建一个主控制器,根据URL参数决定将使用什么配置

  • 我的第一个想法是创建一个主控制器。所有对服务器的请求都将被重定向到此控制器,然后,此主控制器将决定使用哪个控制器,并重定向到它。问题是这样做会产生太多的请求

  • 我的第二个想法是在每个控制器的开头调用一个函数,必要时重定向到正确的控制器。问题是一样的:它会增加请求的数量

  • 具体示例:假设我有以下URL:

    http:\\myapp.com\?showController1=true

    http:\\myapp.com\abcd?showController1=true

    当服务器收到请求时,我希望最终结果是相同的:show Controller1,独立于请求
    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看起来如何,参数在哪里,参数改变时会发生什么等等,我们很可能会帮助你。我做了一些改变,试图为问题带来更多的信息。非常感谢你的回答并回顾我的问题。最初的答案非常适合我的问题。