具有一个可生成JSON响应的ASP.NET Web API端点。但是由于两个因素,无法直接从浏览器中使用。
因此,我需要用于客户端(浏览器)请求的轻量级服务器端代理,以使用会话密钥扩展请求。不想在代理代码中强加反序列化客户端JSON请求或Web API JSON响应的开销。希望按原样传递有效负载并反序列化客户端仅请求Web API端,而Web API仅响应客户端(浏览器)端。那就是代理从浏览器获取json并将其直接传递到Web API。还将JSON响应从Web API直接传递到浏览器,而无需反序列化。只是一个虚拟代理,它对传输的数据一无所知。请提出这是否可行以及实现它的最佳方法是什么。现有的Web应用程序(用于生成客户端页面的Web应用程序)是使用ASP.NET MVC 4实现的。
提前致谢。
我为以前的WebApi版本编写了一个。出于您的目的,代码应该相当容易更新。
基本思想是创建一个将请求传递给HttpClient的WebApi DelegatingHandler:
public class ForwardProxyMessageHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.Add("X-Forwarded-For", request.GetClientIp());
if (request.Method == HttpMethod.Get || request.Method == HttpMethod.Trace) request.Content = null;
request.RequestUri = new Uri(request.RequestUri.ToString().Replace(":3002", "")); //comes through with the port for the proxy, rewrite to port 80
request.Headers.AcceptEncoding.Clear();
var responseMessage = await new HttpClient().SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.Headers.TransferEncodingChunked = null; //throws an error on calls to WebApi results
if (request.Method == HttpMethod.Head) responseMessage.Content = null;
return responseMessage;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句