从WebRequest获取标头

hug*_*gie 0 c# webrequest

从技术上讲,我正在问一个写VB的朋友的问题,但我发布了C#,因为有更多的人在上面.我个人也不知道.

我正在帮他连接到Mobile Backend即服务,虽然他设置的方式是代表有人用ASP.net加载他自己的网页(我想).

我正在使用Python连接到服务.但他得到了422服务器响应.我想比较他和我之间的请求标题和内容差异.

根据Chris Doggett 在此页面下方的帖子,在实际发送请求之前,您无法获取标题.但是,一旦request.GetResponse()调用,Visual Studio(或Express,不确定)似乎只是停在那里的断点,并说在浏览器上有422错误和一些错误消息.所以,他无法到达他希望打印标题的下一行.

两个问题:

  1. 是否开启了某种调试?我认为422响应是一个响应,程序不应该只是停在那里.
  2. 如何打印内容,而不仅仅是标题?最好,我想用文本打印出整个请求.有这些东西用JSON发送,我不认为它属于标题,但我不太确定.

Chr*_*isK 5

Create方法将返回一个HttpWebRequesthttp/https url.在422个状态码表明您在某种程度上形成不正确的数据发送到服务器.GetResponse()将抛出一个WebException因为您没有收到状态代码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();
}
Run Code Online (Sandbox Code Playgroud)