1

コントローラーの1つで、アクションごとにこのコードを実行する必要があります。各アクションのコードをコピーせずにこれを行うにはどうすればよいですか?コントローラのinitメソッドはありますか?

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

3 に答える 3

2

いくつかのオプションがあります。

  1. コードをコンストラクターに入れる
  2. OnActionExecuting を使用する

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
    }
    
于 2012-08-21T15:15:59.073 に答える
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

于 2012-08-21T15:23:03.833 に答える