[英]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 { ... } }
}
您有两种选择:
使用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.