如何解决使用并行连接创建反向代理
我在C#ASP.net中为反向代理编写这段代码
public class ProxyHandler : IHttpHandler,IRouteHandler
{
public bool IsReusable
{
get { return true; }
}
DBEntities db = new DBEntities();
public void ProcessRequest(HttpContext context)
{
string inputAction = context.Request.Url.ToString().Substring(context.Request.Url.ToString().IndexOf("/rp/") + 4);
string action = inputAction.Substring(0,inputAction.IndexOf('/'));
string input = inputAction.Substring(inputAction.IndexOf('/') + 1);
if (action == "getFile")
{
string hash = input;
var link = db.LinkDownloaders.Where(tbl => tbl.sourcePathMD5 == input).FirstOrDefault();
if (link != null)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(link.sourcePath);
webRequest.Proxy = null;
webRequest.Credentials = CredentialCache.DefaultCredentials;
if (context.Request.Headers["Range"] != null)
{
string range = context.Request.Headers["Range"].Replace("bytes=","");
string[] ranges = range.Split('-');
long start = 0;
long end = 0;
long.TryParse(ranges[0],out start);
long.TryParse(ranges[1],out end);
if (end > start)
{
webRequest.AddRange(start,end);
}
else
{
webRequest.AddRange("bytes",start);
}
}
webRequest.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
var response = (HttpWebResponse)webRequest.GetResponse();
string fileName = response.ResponseUri.Segments.LastOrDefault();
context.Response.AddHeader("content-disposition","attachment;filename=\""+ fileName +"\"");
foreach (string item in response.Headers.AllKeys)
{
context.Response.AddHeader(item,response.Headers.Get(item));
}
Stream responseStream = response.GetResponseStream();
context.Response.ContentType = response.ContentType;
byte[] buffer = new byte[4096];
while (true)
{
int read = responseStream.Read(buffer,buffer.Length);
if (read <= 0)
return;
context.Response.OutputStream.Write(buffer,read);
}
}
}
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return this;
}
}
此代码适用于具有一个连接的文件下载(浏览器下载程序),但是当我使用Internet下载管理器程序将文件作为并行连接下载或恢复下载时,该代码不起作用。 我对http标头有些了解,我添加了“ Range”标头来获取文件部分,但仍然无法正常工作。 请建议并指导我。
解决方法
在用提琴手检查响应和请求标头之后,我发现部分http请求状态代码是“ 206”而不是“ 200”,然后我将此行代码添加到我的反向代理处理程序中
context.Response.StatusCode = 206;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。