Как инициировать запрос к другому контроллеру (со свежим RequestContext + Request) из контроллера ASP.NET? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть сценарий, когда мне нужно вызвать другой контроллер, притворившись совершенно новым запросом (например, с новыми файлами 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 с новым запросом, который имеет правильные значения, это было бы предпочтительным решением. Любые идеи или идеи будут высоко оценены!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...