我正在使用POST方法创建一个控制器,该控制器打算用作“传递”控制器,以从其他URL获取数据。 “真实” URL无法直接接受来自浏览器的请求,因为端点api需要一个必须首先在我的服务器上计算的值。因此,在代理控制器中,我正在计算该所需值,并将该值(以及请求的其余部分)发送到“真实” URL。然后,我的控制器从“真实” URL获取响应,并将其传递回我的客户端(浏览器)。
至少这是应该做的。它似乎大部分都在工作。但是,当我将响应传递回浏览器时遇到问题。这是控制器:
public class ProxyController : Controller
{
[HttpPost]
public HttpResponseMessage Index()
{
var paramObjects = new Dictionary<string, object>();
Request.Form.CopyTo(paramObjects);
var parameters = paramObjects.Select(x => new KeyValuePair<string, string>(x.Key, x.Value.ToString()));
var encodedContent = new FormUrlEncodedContent(parameters);
var url = "https://the_real_url.com";
var httpClient = new HttpClient();
HttpResponseMessage response = null;
using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, url))
{
//CALCULATE AND ADD THE REQUIRED VALUE TO THE HEADER
requestMessage.Headers.Add("CONNECTUSER", GetSAN());
requestMessage.Content = encodedContent;
var task = httpClient.SendAsync(requestMessage).ContinueWith((x) =>
{
response = x.Result;
});
task.Wait();
return response;
}
}
}
在客户端上,我正在向我的代理控制器提交表单数据:
<form name="submitForm" id="submitForm" style="font-size: 0px;" action="@Url.Content("~/proxy")" method="post" target="_blank">
<input type="hidden" name="MY_action" value="RUN">
<input type="hidden" name="MY_path" value="blah/blah/blah">
<input type="hidden" name="SN1" value="3568458">
<input type="hidden" name="DUPLEX" value="Y">
<input type="hidden" name="MY_Random" value="0.5740999095141093">
<input type="hidden" name="MY_sub_action" value="USER_ACTION">
</form>
当我逐步执行控制器中的代码时,我从response
对象获得的响应返回了200条代码,所有内容似乎都在那里。但是在浏览器中,我看到的只是这个:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Pragma: no-cache X-XSS-protection: 0 Strict-Transport-Security: max-age=31557600; includeSubDomains Cache-Control: no-store, must-revalidate, no-cache Date: Thu, 13 Jun 2019 15:31:52 GMT Set-Cookie: JSESSIONID=34276Y5F3425F325325H3.ajp13w; Path=/my_apps; Secure; HttpOnly Set-Cookie: COOKIE_HERE; Path=/; Secure; HTTPOnly Set-Cookie: TANOTHER_COOKIE_HERE; path=/my_apps; HTTPonly; Secure Content-Length: 11349 Content-Type: text/html; charset=UTF-8 Expires: Thu, 01 Jan 1970 00:00:00 GMT }
这就像我在正文中看到标题信息一样。在浏览器中,我想查看从“真实” URL返回的HTML(或其他类型的内容)。内容在那里。调试时可以看到它。但是我在浏览器中看到的只是标题信息。我不确定如何正确地将这些数据交还给浏览器。几乎就像我从代理控制器中返回错误类型的对象一样。我如何才能将这些数据正确地传递给浏览器?
需要注意的一件事-“真实” URL可以返回多种类型的数据。它可以是HTML,也可以是PDF,或者可以是JSON。我希望我的代理控制器保持通用性,以处理任何情况。