如何在ASP.NET控制器中向另一个控制器(带有新的RequestContext + Request)发起请求?

时间:2018-11-06 19:15:47

标签: c# asp.net asp.net-mvc

我有一种情况,我需要调用另一个控制器,假装是一个全新的请求(因此带有新的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,那将是更好的解决方案。任何想法或见解将不胜感激!

0 个答案:

没有答案