在控制器的构造函数中访问动作方法的参数

本文关键字:方法 参数 控制器 构造函数 访问 | 更新日期: 2023-09-27 18:17:34

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

但是有一个控制器MyController,它的动作第一次从另一个应用模块接收这个变量到这个模块,所以直到那时它才被设置到会话中。

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

所以我的BaseController计算是错误的这个行动。是否有一种方法可以让这个变量值进入BaseController的构造函数。这样我就可以检查会话值是否为空,然后检查这个参数并设置会话。

请建议我是否可以这样做,或者我可以用其他方法解决我的问题。

在控制器的构造函数中访问动作方法的参数

Andrei的评论帮助了我,我使用了Andrei提到的线程。讨论了拦截传入请求的问题。有两种方法可以帮助我,HttpModuleApplication_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
}