Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用身份验证和标头的Windows 8.1应用商店应用下载文件_C#_Authentication_Windows 8.1_Windows Store - Fatal编程技术网

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方法,而不是手动添加头。看见