ASP.Net MVC3控制器“全局”

时间:2012-08-21 15:11:59

标签: asp.net asp.net-mvc-3

我需要在我的一个控制器中为每个操作运行此代码。如何在不必为每个操作复制代码的情况下执行此操作?是否有控制器的init方法?

System.Web.HttpSessionStateBase Sess = HttpContext.Session;
string pid = (Sess["PID"] != null ? Sess["PID"].ToString() : "");
string LogonTicket = (Sess["LogonTicket"] != null ? Sess["LogonTicket"].ToString() : "");

3 个答案:

答案 0 :(得分:3)

为什么不将它包装到基本控制器的属性中?

class abstract YourControllerBase : Controller
{
   public string Pid { get { ... } }
   public string LogonTicket { get { ... } }
}

答案 1 :(得分:2)

您有几个选择:

  1. 将代码放在构造函数
  2. 使用OnActionExecuting

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
    }
    

答案 2 :(得分:1)

我认为虽然绝对正确,抽象类和基于继承的答案会让“提问者”感到不舒服,因为他正在努力研究一个更简单的案例然后继承。

一个简短的回答 - 只需将代码放入控制器的构造函数中即可。

例如:

public HomeController: Controller {

    private string _pid;
    private string _logonTicket;

    public HomeController() {

        System.Web.HttpSessionStateBase Sess = HttpContext.Session;

        _pid = (Sess["PID"] != null ? Sess["PID"].ToString() : "");
        _logonTicket = (Sess["LogonTicket"] != null ? Sess["LogonTicket"].ToString() : "");
    }


//REST OF YOUR CONTROLLER CODE

}

现在,您可以从控制器操作的代码中访问_pid_logonTicket