C# 将动作方法的参数访问控制器';s构造函数

C# 将动作方法的参数访问控制器';s构造函数,c#,asp.net-mvc,session,C#,Asp.net Mvc,Session,我有一个名为BaseController的控制器,它由所有其他控制器继承。我有一个BaseController的构造函数,其中我根据它从会话中选择的变量patId进行一些计算,并根据此计算允许用户执行一些操作 但是有一个控制器MyController,它的操作第一次从另一个应用程序模块将此变量接收到此模块,因此在此之前它不会设置到会话中 public ActionResult MyAction(string patId) { // First time patId is been set i

我有一个名为
BaseController
的控制器,它由所有其他控制器继承。我有一个
BaseController
的构造函数,其中我根据它从会话中选择的变量patId进行一些计算,并根据此计算允许用户执行一些操作

但是有一个控制器
MyController
,它的操作第一次从另一个应用程序模块将此变量接收到此模块,因此在此之前它不会设置到会话中

public ActionResult MyAction(string patId)
{
  // First time patId is been set into session 

}
因此,对于此操作,我的
BaseController
计算出错。是否有办法将此变量值输入到
BaseController
的构造函数中。这样我就可以检查会话值是否为null,然后检查此参数并设置会话


请建议我是否可以这样做,或者我是否可以从任何其他方式解决我的问题。

Andrei comment帮助了我,我使用了。讨论了拦截传入请求的方法。有两种方法可以帮助我,分别是
HttpModule
Application\u BeginRequest
,我选择了后者

但我在控制器的构造函数中通过使用
HttpContext
拦截http请求实现了这一点,这在控制器的构造函数中也是可用的

public BaseController()
{
   // Check if variable exist in session
   // else check if patId is sent through request
   // then save it in session

   System.Web.HttpContext.Current.Session["PatId"] = System.Web.HttpContext.Request.Form["patId"];

   // perform remaining calculation
}

仅使用控制器构造函数是不可能的。您不能只检查该值在会话中是否可用,如果不可用,则停止计算吗?另一个选项是截获所有传入请求并从中获取值,如果需要,在请求到达控制器之前,请参阅ideastanks@Andrei。。看来会有帮助的。我会尝试选择第二种选择,如果这对我有帮助,我会试一试not@Andrei,如果我使用ActionFilter拦截请求,但首先调用的是controller的构造函数,而不是FilterAttribute。我不是说ActionFilters从该线程开始,我认为这是显而易见的。其他人谈论http模块和应用程序_BeginRequest,它们应该对您更有用