У меня есть сценарий, когда мне нужно вызвать другой контроллер, притворившись совершенно новым запросом (например, с новыми файлами cookie, URL и параметрами запроса) и вернуть его ответ.
Итак:
Веб-запрос -> ControllerA.Action -> сгенерировать некоторые параметры для вызова другого контроллера -> init ControllerB-> вызвать ControllerB.Action и получить View -> return View
Я упростил сценарий, поэтому, пожалуйста, не зацикливайтесь на этом. Я использовал следующее решение для создания ControllerB и вызова его, но проблема, с которой я сталкиваюсь, заключается в том, что информация HttpContext и HttpRequest по-прежнему будет исходным веб-запросом. 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();
В настоящее время это не работает, но я был бы рад услышать любые идеи! Вместо этого, если бы я мог создать ControllerB с новым запросом, который имеет правильные значения, это было бы предпочтительным решением. Любые идеи или идеи будут высоко оценены!