Technically I'm asking a question for a friend who writes VB, but I post as C# since more people are on it. And I personally know neither.

I'm helping him connecting to a Mobile Backend as a Service, although the way he set up he is connecting it on behalf of someone loading his own web page with ASP.net (I think).

I'm connecting to the service just fine using Python. But he is getting a 422 server response. I would like to compare the request header & content difference between his and mine.

According to Chris Doggett's post on this page down below, you can't get the headers until the request is actually sent. However, as soon as request.GetResponse() is called, Visual Studio (or the Express, not sure) seems to just halt on a break point there and say there is a 422 error and some error message on the browser. So, he can't get to the next line where he wish to print out the headers.

Two questions:

  1. Is that some sort of debugging turned on? I thought a 422 response is a response nevertheless and the program shouldn't just stop there.
  2. How do I print out the the content as well, not just the headers? Preferably, I want to print out the entire request in text. There is this stuff sent in JSON and I don't think that belongs to the headers but I'm not so sure.
有帮助吗?

解决方案

The Create method will return an HttpWebRequest for an http/https url. The 422 status code indicates that you are somehow sending incorrect formed data to the server. GetResponse() will throw a WebException because you don't receive the status code 200.

To get the actual headers of the response you need to handle the exception

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();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top