我需要在我的一个控制器中为每个操作运行此代码。如何在不必为每个操作复制代码的情况下执行此操作?是否有控制器的init方法?
System.Web.HttpSessionStateBase Sess = HttpContext.Session;
string pid = (Sess["PID"] != null ? Sess["PID"].ToString() : "");
string LogonTicket = (Sess["LogonTicket"] != null ? Sess["LogonTicket"].ToString() : "");
答案 0 :(得分:3)
为什么不将它包装到基本控制器的属性中?
class abstract YourControllerBase : Controller
{
public string Pid { get { ... } }
public string LogonTicket { get { ... } }
}
答案 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
。