繁体   English   中英

ASP.Net MVC3控制器“全局”

[英]ASP.Net MVC3 Controller “globals”

我需要在一个控制器中为我的每个动作运行此代码。 我如何做到这一点而不必复制每个动作的代码? 控制器有初始化方法吗?

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

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

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

您有两种选择:

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

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

我认为,尽管绝对正确,但抽象类和基于继承的答案使“提问者”感到不舒服,因为他正在尝试处理一个比继承更简单的案例。

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

例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM