【问题标题】:Windows 8.1 store app Download file using authentication and headerWindows 8.1 商店应用程序使用身份验证和标头下载文件
【发布时间】:2014-06-28 23:08:20
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

这是怎么做的:

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/

【讨论】:

    【解决方案2】:

    这是另一种方法

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

    【讨论】:

      猜你喜欢
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多