簡體   English   中英

Windows 8.1存儲應用程序使用身份驗證和標頭下載文件

[英]Windows 8.1 store app Download file using authentication and header

我正在嘗試從服務器下載文件並在我的應用程序中添加身份驗證和范圍標頭,因此此語法正確嗎?

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的其他信息,那么關於這方面的一則很棒的文章是關於如何實現和使用它的: http : //www.strathweb.com/2012/07/bson-binary-json-and-how-your-網絡API可以更快/

這是另一種方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM