在c#中WebResponse标头没有返回ETag

时间:2012-03-09 02:08:53

标签: c# httpwebrequest http-headers etag

我正在尝试从响应头中提取ETag。它确实存在于响应中。我可以使用firebug看到它,我可以使用检查器在响应对象中看到它:

Status: 200 OK
X-Api-Version: 1.3.2
Access-Control-Allow-Origin: *
X-Runtime: 0.151298
Connection: keep-alive
Content-Length: 8185
Cache-Control: public, max-age=11216
Content-Type: application/json; charset=utf-8
Date: Fri, 09 Mar 2012 01:40:05 GMT
Expires: Fri, 09 Mar 2012 04:47:01 GMT
ETag: "bd3fe1123a8f55e01ca859f4804e8fbe"
Last-Modified: Fri, 09 Mar 2012 00:47:01 GMT
Server: nginx/1.0.11

所有其他代码工作正常,使得HttpWebRequest,获得respose等。唯一的问题是我在尝试获取ETag时(总是在响应头中存在)时始终为null。

以下是简化代码:

        var request = (HttpWebRequest)WebRequest.Create(validUri);
        SetHeaders(); // helper function to set basic headers.
        var response = request.GetResponse();

        var stream = response.GetResponseStream();
        var reader = new StreamReader(stream);
        var result = reader.ReadToEnd();

        var etag = response.Headers.Get("ETag");

任何人都知道为什么我似乎无法提取现有的ETag?

1 个答案:

答案 0 :(得分:2)

您的代码无法重现您所描述的问题。你的问题出在你未提及的问题上。这是一个基于您的代码的简短的完整的程序,它执行并打印出ETag的值而没有问题:

using System;
using System.IO;
using System.Net;

namespace SO9628006
{
    class Program
    {
        static void Main()
        {
            var request = (HttpWebRequest)WebRequest.Create("http://www.fiddler2.com/Fiddler/Fiddler.css");
            var response = request.GetResponse();

            var stream = response.GetResponseStream();
            var reader = new StreamReader(stream);
            var result = reader.ReadToEnd();

            var etag = response.Headers.Get("ETag");

            Console.WriteLine(etag);

        }
    }
}

输出:

"6c3673ba919ec71:243"

请您提供说明您问题的short but complete program吗?