【问题标题】:set range on HttpWebRequest headers in Metro App在 Metro App 中设置 HttpWebRequest 标头的范围
【发布时间】:2013-08-16 09:30:21
【问题描述】:

我正在开发 Windows 商店应用程序,我尝试为 HttpWebRequest 上的范围标头设置一个值,但我不知道如何执行此操作。我尝试的 3 种解决方案都不起作用(例外或方法/属性不存在,即使它们在 msdn 文档中)。

//Create the request.
        HttpWebRequest getRequest = WebRequest.Create(download.URI) as HttpWebRequest;

        // Set the request's method.
        getRequest.Method = "GET";

        //Set the Range'value on header
        /*(1)*/ getRequest.Headers[HttpRequestHeader.Range] = "bytes="+download.DownloadedBytes+"-";
        /*(2)*/ getRequest.Headers.Range = new RangeHeaderValue(download.DownloadedBytes,null);
        /*(3)*/ getRequest.Headers.AddRange(download.DownloadedBytes);

我知道 HttpWebRequest 处于半弃用状态,但我不想使用 HttpClient 类。当http请求失败时如何检索错误代码我不高兴。

有人有想法吗?

【问题讨论】:

    标签: c# .net http-headers windows-store-apps


    【解决方案1】:

    在您的初始标题中

    getRequest.Headers[HttpRequestHeader.Range] = "bytes="+download.DownloadedBytes+"-";
    

    我不确定 download.DownloadedBytes 的值是多少,但我不相信该字符串会满足 Range 字段标题。字符串的格式应为“bytes=500-999”

    我没有使用 HttpWebRequest 进行这项工作,但我可以为 HttpClient 提供一个示例(抱歉,我知道你不想切换到这个,但它可能是最好的)

    var client = new HttpClient(handler);
    client.DefaultRequestHeaders.Add("range", @"bytes=0-9000");
    var response = await client.GetAsync(url);
    

    当然,需要注意的是,并非所有的 Web 服务器都会尊重范围标头。祝你好运!

    【讨论】:

    • 我不再从事这个项目,但如果我记得的话,例外是关于对该方法的一些受限访问。不幸的是,我现在无法测试您的解决方案。但是,对于这个项目,我只是在客户端和服务器端工作时设置了自己的标头。无论如何,谢谢你的回答,我会测试你的解决方案(有一天)
    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多