0

HTTPRequestリクエストのためにC#プロジェクトで作業を開始しようとしていますがGET、完全に機能させることができません。以下は私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Windows;
using System.Diagnostics;
using System.Threading;

class MyClass 
{
    const string URL_PREFIX = "http://mycompany.com/";
    private HttpWebRequest objRequest = null;
    private static string myRequestData = string.Empty;
    private string urlAddress;


    public MyClass()
    {
        int member = 1;
        int startLoc = 1;
        int endLoc = 1;
        string starttime = "2012-01-01 00:00:00";
        string endtime = "2012-01-01 00:00:00";
        int rt = 1;
        string cmt = "Hello World";

        this.urlAddress = URL_PREFIX + string.Format(
        "createtrip.php?member={0}&startLoc={1}&endLoc={2}&starttime={3}&endtime={4}&rt={5}&cmt={6}"
        , member, startLoc, endLoc, starttime, endtime, rt, cmt);

        StringBuilder completeUrl = new StringBuilder(urlAddress);
        objRequest = (HttpWebRequest)WebRequest.Create(urlAddress);
        objRequest.ContentType = "application/x-www-form-urlencoded";

        objRequest.BeginGetRequestStream(new AsyncCallback(httpComplete), objRequest);
    }
    private static void httpComplete(IAsyncResult asyncResult)
    {
        HttpWebRequest objHttpWebRequest = (HttpWebRequest)asyncResult.AsyncState;
        // End the operation
        Stream postStream = objHttpWebRequest.EndGetRequestStream(asyncResult);
        // Convert the string into a byte array.
        byte[] byteArray = Encoding.UTF8.GetBytes(myRequestData);
        // Write to the request stream.
        postStream.Write(byteArray, 0, myRequestData.Length);
        postStream.Close();

        // Start the asynchronous operation to get the response
        objHttpWebRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), objHttpWebRequest);

    }
    private static void GetResponseCallback(IAsyncResult asyncResult)
    {
        HttpWebRequest objHttpWebRequest = (HttpWebRequest)asyncResult.AsyncState;
        HttpWebResponse objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.EndGetResponse(asyncResult);
        Stream objStreamResponse = objHttpWebResponse .GetResponseStream();
        StreamReader objStreamReader = new StreamReader(objStreamResponse );
        string responseString = objStreamReader.ReadToEnd();            // Got response here
         MessageBox.Show("RESPONSE :" + responseString);
        // Close the stream object
        objStreamResponse .Close();
        objStreamReader.Close();
        objHttpWebResponse.Close();
    }

}

現在発生しているエラーは次のとおりです。

An exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.ni.dll and wasn't handled before a managed/native boundary A first chance exception of type 'System.Net.ProtocolViolationException' occurred in System.Windows.ni.dll Operation is not valid due to the current state of the object.

4

2 に答える 2

2

.NET 4を必要とし、WP7、WP8、Silverlight 4-5、Windowsストアアプリ、ポータブルクラスライブラリで動作する強力なライブラリ「MicrosoftHTTPクライアントライブラリ」を使用することをお勧めします。

NuGetから追加するだけで、非常に簡単に使用できます。

HTTPGETの例を次に示します。

        private async Task PerformGet()
        {
            HttpClient client = new HttpClient();
            HttpResponseMessage response = await client.GetAsync(myUrlGet);
            if (response.IsSuccessStatusCode)
            {
                // if the response content is a byte array
                byte[] contentBytes = await response.Content.ReadAsByteArrayAsync();

                // if the response content is a stream
                Stream contentStream = await response.Content.ReadAsStreamAsync();

                // if the response content is a string (JSON or XML)
                string json = await response.Content.ReadAsStringAsync();

                // your stuff..
            }
        }
于 2014-02-22T11:52:11.553 に答える
1

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx

メソッド「BeginGetRequestStream」をGETまたはHEADリクエストで使用することはできません(GETはデフォルトのリクエストであり、最初のHTTPリクエストで実行しているものです)。

コードの2番目の部分ですでに行ったように、「BeginGetResponse」を使用するように変更します。

于 2013-02-11T15:09:56.517 に答える