我有一种情况,我需要调用另一个控制器,假装是一个全新的请求(因此带有新的cookie,URL和查询参数)并返回其响应。
所以:
Web请求-> ControllerA.Action->生成一些参数以调用另一个控制器->初始化ControllerB->调用ControllerB.Action并获取View->返回View
我已经简化了方案,所以请不要过多关注这一点。我已经使用以下解决方案创建ControllerB并对其进行调用,但是我面临的问题是HttpContext和HttpRequest信息仍将来自初始Web请求。 ControllerB注入了从this.Request和HttpContext.Current中读取的依赖项,因此它将获取初始请求的值:
var controller = ControllerBuilder.Current.GetControllerFactory().CreateController(this.Request.RequestContext, "Second") as SecondController;
return controller.Load();
我正在考虑的另一种可能性是,是否可以将新的HttpRequest生成到本地服务器。像这样:
var secondRequest = new HttpRequest("", redirectLocation.AbsolutePath, redirectLocation.Query);
// Add the headers for my new request
secondRequest.Headers.Add(response.Headers);
// Add the cookies for my new request
httpCookies.ForEach(cookie => secondRequest.Cookies.Add(cookie));
// Create controller with RequestContext from my new request
var controller = ControllerBuilder.Current.GetControllerFactory().CreateController(secondRequest.RequestContext, "Second") as SecondController;
return controller.Load();
目前无法正常工作,但是很高兴听到任何想法!相反,如果我可以使用具有正确值的新Request构造ControllerB,那将是更好的解决方案。任何想法或见解将不胜感激!