C# 使用身份验证和标头的Windows 8.1应用商店应用下载文件
我正在尝试从服务器下载一个文件,并在我的应用程序中添加身份验证和范围头,那么这个语法正确吗C# 使用身份验证和标头的Windows 8.1应用商店应用下载文件,c#,authentication,windows-8.1,windows-store,C#,Authentication,Windows 8.1,Windows Store,我正在尝试从服务器下载一个文件,并在我的应用程序中添加身份验证和范围头,那么这个语法正确吗 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); request.Headers["Range"] = "bytes=0-"; request.Credentials = new NetworkCredential("use
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
request.Headers["Range"] = "bytes=0-";
request.Credentials = new NetworkCredential("username","password");
当然,代码还有其他部分用于将文件作为流读取和存储,但我关心的是范围头和身份验证部分,因为它不起作用
我有个例外
{"The 'Range' header must be modified using the appropriate property or method.\r\nParameter name: name"}
以下是如何做到这一点:
public async Task<byte[]> DownloadFileAsync(string requestUri)
{
// Service URL
string serviceURL = "http://www.example.com";
// Http Client Handler and Credentials
HttpClientHandler httpClientHandler = new HttpClientHandler();
httpClientHandler.Credentials = new NetworkCredential(username, passwd, domain);
// Initialize Client
HttpClient client = new HttpClient(httpClientHandler)
client.BaseAddress = new Uri(serviceURL);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson"));
// Add Range Header
client.DefaultRequestHeaders.Add("Range", "bytes=0-");
// Deserialize
MemoryStream result = new MemoryStream();
Stream stream = await client.GetStreamAsync(requestUri);
await stream.CopyToAsync(result);
result.Seek(0, SeekOrigin.Begin);
// Bson Reader
byte[] output = null;
using (BsonReader reader = new BsonReader(result))
{
var jsonSerializer = new JsonSerializer();
output = jsonSerializer.Deserialize<byte[]>(reader);
}
return output;
}
我目前正在使用BSON媒体格式。如果您需要有关后端BSON的其他信息,herre有一篇关于如何实现和使用BSON的精彩文章:
这里有另一种方法
var httpClientHandler = new HttpClientHandler();
httpClientHandler.Credentials = new System.Net.NetworkCredential("username", "password");
var client = new HttpClient(httpClientHandler);
System.Net.Http.HttpRequestMessage request = new System.Net.Http.HttpRequestMessage(HttpMethod.Post, new Uri(url));
request.Headers.Range = new RangeHeaderValue(0, null);
HttpResponseMessage response = await client.SendAsync(request);
这意味着您应该调用AddRange方法,而不是手动添加头。看见