Windows 8.1商店应用程序使用身份验证和标头下载文件

时间:2014-05-08 13:37:17

标签: c# authentication windows-8.1 windows-store

我尝试从服务器下载文件并在我的应用中添加身份验证和范围标头,这种语法是否正确?

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"}

2 个答案:

答案 0 :(得分:0)

以下是如何操作:

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的附加信息,那么这篇文章就如何实现并使用它而言是一篇很棒的文章: http://www.strathweb.com/2012/07/bson-binary-json-and-how-your-web-api-can-be-even-faster/

答案 1 :(得分:0)

这是另一种方法

   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);