gpt4 book ai didi

asp.net-mvc - mvc中的反向代理

转载 作者:行者123 更新时间:2023-12-04 07:28:33 27 4
gpt4 key购买 nike

我必须在 mvc 中实现类似 proxy 的东西来发送另一台服务器上的用户文件。我找到了这个类:

public class ProxyHandler : IHttpHandler, IRouteHandler
{
public bool IsReusable
{
get { return true; }
}

public void ProcessRequest(HttpContext context)
{

string str = "http://download.thinkbroadband.com/100MB.zip";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(str);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());


HttpResponse res = context.Response;
res.Write(reader.ReadToEnd());
}

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return this;
}
}

问题是在这个解决方案中,我首先下载文件,然后将下载的文件发送给用户,这不是我想要的。我想在开始下载文件后立即将文件发送给用户,例如在此 Online Anonymizer 中
http://bind2.com/

任何建议如何实现这一目标?

最佳答案

上面示例中的以下行:

res.Write(reader.ReadToEnd());

相当于:
string responseString = reader.ReadToEnd();
res.Write(responseString);

IE。整个 Web 响应在传递给客户端之前被下载并存储在一个字符串中。

相反,您应该使用以下内容:
Stream responseStream = response.GetResponseStream();

byte[] buffer = new byte[32768];
while (true)
{
int read = responseStream.Read(buffer, 0, buffer.Length);
if (read <= 0)
return;
context.Response.OutputStream.Write(buffer, 0, read);
}

(流复制代码取自 Best way to copy between two Stream instances - C# )

这会以 32 KB 的块复制流 - 您可能希望将此块大小变小。

关于asp.net-mvc - mvc中的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com