我正在编写一个渐进式下载器作为可移植类库(Profile = 24)。它将支持以块为单位部分下载目标文件。 HttpClient不可用,我将使用HttpWebRequest,它具有部分下载的AddRange方法。但这种方法似乎不是从PCL内部获得的。所以我设置了HttpWebRequest.Headers [“Range”],但这样做会引发以下ArgumentException:
“必须使用适当的属性或方法修改'Range'标头。\ r \ nParameter name:name”
“适当的属性”似乎是HttpWebRequest.AddRange,但正如我所说,它似乎没有从PCL内部暴露出来。所以我很困惑:在PCL中指定HttpWebRequest.Headers [“Range”]的正确方法是什么?
谢谢, 西蒙
答案 0 :(得分:0)
我没有找到答案,但以下界面解决方法对我有用:
我没有在便携式代码中创建HttpWebRequest,而是定义了以下自定义接口:
public interface IMyRequest {
[...]
void AddRange(long from, long to);
}
public interface IMyRequestFactory {
IMyRequest Create(string url);
}
然后,在我的非可移植代码中,我创建了实现这些接口的类:
public class MyRequestImp : IMyRequest {
private readonly HttpWebRequest request;
public MyRequestImp (string url) {
request = (HttpWebRequest)WebRequest.Create(url);
}
[...]
public void AddRange(long from, long to) {
request.AddRange(from, to);
}
}
public class MyRequestFactoryImp: IMyRequestFactory {
public IMyRequest Create(string url) {
return new MyRequestImp(url);
}
}
在初始化时的某个时刻,我的非可移植代码通过IMyRequestFactory接口将MyRequestFactoryImp对象传递给我的可移植库。由于HttpWebRequest是在PCL之外创建的,因此您可以访问该类的全部功能。