C# 从WebRequest获取标题

C# 从WebRequest获取标题,c#,webrequest,C#,Webrequest,从技术上讲,我是在问一个写VB的朋友一个问题,但我以C#的身份发帖,因为越来越多的人使用它。我个人也不知道 我正在帮助他作为一项服务连接到一个移动后端,尽管他设置的方式是代表某人用ASP.net加载自己的网页(我想) 我正在使用Python连接到服务。但他得到了422服务器的响应。我想比较一下他和我的请求头和内容的差异 根据Chris Doggett在下面的文章,在请求实际发送之前,您无法获取标题。但是,只要调用request.GetResponse(),Visual Studio(或Expre

从技术上讲,我是在问一个写VB的朋友一个问题,但我以C#的身份发帖,因为越来越多的人使用它。我个人也不知道

我正在帮助他作为一项服务连接到一个移动后端,尽管他设置的方式是代表某人用ASP.net加载自己的网页(我想)

我正在使用Python连接到服务。但他得到了422服务器的响应。我想比较一下他和我的请求头和内容的差异

根据Chris Doggett在下面的文章,在请求实际发送之前,您无法获取标题。但是,只要调用
request.GetResponse()
,Visual Studio(或Express,不确定)似乎就在断点处停止,并说浏览器上有422错误和一些错误消息。因此,他无法进入下一行,他希望打印标题

两个问题:

  • 这是某种调试打开了吗?我认为422响应是一个响应,但是程序不应该就此停止
  • 如何打印内容,而不仅仅是标题?最好是,我想用文本打印出整个请求。这些东西是用JSON发送的,我认为这不属于标题,但我不太确定

  • Create
    方法将返回http/https url的
    HttpWebRequest
    。表示您正以某种方式向服务器发送不正确的格式数据
    GetResponse()
    将抛出一个错误,因为您没有收到 状态代码
    200

    要获取响应的实际标头,需要处理异常

    private static void Main(string[] args)
    {
        WebRequest request = WebRequest.Create("http://google.com/12345"); //generate 404
    
        try
        {
    
            WebResponse response = request.GetResponse();
        }
        catch(WebException ex)
        {
            HttpWebResponse errorResponse = ex.Response as HttpWebResponse;
    
            if (errorResponse == null)
                throw; //errorResponse not of type HttpWebResponse
    
            string responseContent = "";
    
            using(StreamReader r = new StreamReader(errorResponse.GetResponseStream()))
            {
                responseContent = r.ReadToEnd();
            }
    
            Console.WriteLine("The server at {0} returned {1}", errorResponse.ResponseUri, errorResponse.StatusCode);
    
            Console.WriteLine("With headers:");
            foreach(string key in errorResponse.Headers.AllKeys)
            {
                Console.WriteLine("\t{0}:{1}", key, errorResponse.Headers[key]);
            }
    
            Console.WriteLine(responseContent);
        }
    
        Console.ReadLine();
    }
    

    Create
    方法将返回http/https url的
    HttpWebRequest
    。表示您正以某种方式向服务器发送不正确的格式数据
    GetResponse()
    将抛出一个错误,因为您没有收到 状态代码
    200

    要获取响应的实际标头,需要处理异常

    private static void Main(string[] args)
    {
        WebRequest request = WebRequest.Create("http://google.com/12345"); //generate 404
    
        try
        {
    
            WebResponse response = request.GetResponse();
        }
        catch(WebException ex)
        {
            HttpWebResponse errorResponse = ex.Response as HttpWebResponse;
    
            if (errorResponse == null)
                throw; //errorResponse not of type HttpWebResponse
    
            string responseContent = "";
    
            using(StreamReader r = new StreamReader(errorResponse.GetResponseStream()))
            {
                responseContent = r.ReadToEnd();
            }
    
            Console.WriteLine("The server at {0} returned {1}", errorResponse.ResponseUri, errorResponse.StatusCode);
    
            Console.WriteLine("With headers:");
            foreach(string key in errorResponse.Headers.AllKeys)
            {
                Console.WriteLine("\t{0}:{1}", key, errorResponse.Headers[key]);
            }
    
            Console.WriteLine(responseContent);
        }
    
        Console.ReadLine();
    }
    

    实际上,我想知道请求头(以便比较发送的内容)而不是响应头,但知道如何捕获异常是一个好的开始。这些头应该通过
    请求
    对象(实际上是
    HttpWebRequest
    )提供。有一个获取头的示例。GetRequestStream和GetResponse可以抛出异常实际上我想知道请求头(以便比较发送的内容)而不是响应头,但是知道如何捕获异常是一个很好的开始。这些头应该可以通过
    请求
    对象获得(这实际上是一个
    HttpWebRequest
    )。下面是一个获取头的示例。GetRequestStream和GetResponse可以引发异常