HttpWebRequest “POST” returning server error (Exception)

▼魔方 西西 提交于 2019-12-12 04:04:58

问题


I'm trying to call the google URL shortner API from a WP7 app, I tried first on a Console Application by doing this:

        var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url");
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"longUrl\":\"http://www.google.com/\"}";
            Console.WriteLine(json);
            streamWriter.Write(json);
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var responseText = streamReader.ReadToEnd();
            Console.WriteLine(responseText);
        }
        Console.Read();

and it worked fine, and returned everything OK, but when I try to do it on a Windows Phone App like this:

    private void button1_Click(object sender, RoutedEventArgs e)
    {            
        testConnection();
    }

    private void testConnection()
    {
        if (!NetworkInterface.GetIsNetworkAvailable())
            MessageBox.Show("There's no internet connection, please reconnect to the internet and try again");
        else
        {                
            var req = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url");
            req.ContentType = "application/json";
            req.Method = "POST";
            req.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), req);
            textBlock2.Text = "Done";               

        }
    }
    void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
        // End the stream request operation
        Stream postStream = webRequest.EndGetRequestStream(asynchronousResult);

        // Create the post data
        // Demo POST data:
        string postData = "http://www.google.com";
        byte[] byteArray = Encoding.Unicode.GetBytes(postData);

        // Add the post data to the web request            
        postStream.Write(byteArray, 0, byteArray.Length);
        postStream.Close();

        // Start the web request
        webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);
    }


    void GetResponseCallback(IAsyncResult asynchronousResult)
    {

        try
        {
            HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
            HttpWebResponse response;
            // End the get response operation
            response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
            Stream streamResponse = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(streamResponse);
                            textBlock1.Text= streamReader.ReadToEnd();
            streamResponse.Close();
            streamReader.Close();
            response.Close();

        }
        catch (WebException e)
        {

        }
    }

The code always goes to the catch of the try method and gives "not found" error.


回答1:


There is a known issue with SSL and not-trusted certificates. Connection to a web site with SSL that require ClientCertificates is not supported in the current Windows Phone 7 application model (Only BasicAuthentication is supported). You can read about the same problem here: http://forums.create.msdn.com/forums/p/65076/398730.aspx




回答2:


I had a similar issue (which makes sense since I started out with this code as my example...) and when I changed the following code it started working to the point where I could progress forward again.

... from:

byte[] byteArray = Encoding.Unicode.GetBytes(postData);

... to (the equivalent of):

byte[] byteArray = Encoding.UTF8.GetBytes(postData);


来源:https://stackoverflow.com/questions/8049368/httpwebrequest-post-returning-server-error-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!