呼叫另一個 Controller 的方法時 session null

這是因為被呼叫的 Controller 需要初始化,呼叫 Initialize() 並且傳入引數目前的 RequestContext,但此方法是 Protected 不能直接呼叫,只能使用 ControllerFactory,所以為了公開 Initialize 在要在被呼叫的 Controller 加入下列代碼

public class AController : Controller {
  public void InitializeController(RequestContext context) {
    base.Initialize(context);
  }
}

然後在要呼叫的 BController 方法中加入下列代碼

public void CallAnotherControllerMissingSession1() {
  AController aController = new AController();      
  aController.InitializeController(this.Request.RequestContext);
}

或者(被呼叫的 Controller 可省略方法 InitializeController)

public void CallAnotherControllerMissingSession2() {      
  AController aController = new AController();
  aController.ControllerContext = new ControllerContext(this.Request.RequestContext, aController);
}

參考來源

https://stackoverflow.com/questions/31388357/session-is-null-when-calling-method-from-one-controller-to-another-mvc

發佈留言