0

実際、私はこのようなものを持っています:

private void createHttpRequest()
    {
        System.Uri myUri = new System.Uri("..url..");
        HttpWebRequest myHttpRequest = (HttpWebRequest)HttpWebRequest.Create(myUri);
        myHttpRequest.Method = "POST";
        myHttpRequest.ContentType = "application/x-www-form-urlencoded";
        myHttpRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), myHttpRequest);
    }

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

        string hash = HashHelper.createStringHash("123", "TEST", "0216");
        // Create the post data
        byte[] byteArray = createByteArrayFromHash(hash);

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

        // Start the web request
        myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
    }

 void GetResponsetStreamCallback(IAsyncResult callbackResult)
    {
        HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
        using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
        {
            string result = httpWebStreamReader.ReadToEnd();
            ApiResponse apiResponse = (ApiResponse)JsonConvert.DeserializeObject<ApiResponse>(result);
        }
    }

良いです、動作していますが、今はすべてのページでこれらのメソッドを使用し、リクエストを作成するメソッドcreateByteArrayFromHashを変更する必要があります。ページ内の約3行のコードでこれを行うのに役立つヘルパークラスを作成したい場合はどうなりますか。どのようにそれをしますか?私はこのように考えていましたが、応答の前にリクエストを追加するにはどうすればよいですか?それとも別の方法でやりますか?ありがとう

4

1 に答える 1

2

ええ、とを使用する方が良いasyncですawait。このようなラッパーの例を次に示します。

public async Task<string> SendRequestGetResponse(string postData, CookieContainer cookiesContainer = null)
{
    var postRequest = (HttpWebRequest)WebRequest.Create(Constants.WebServiceUrl);
    postRequest.ContentType = "Your content-type";
    postRequest.Method = "POST";
    postRequest.CookieContainer = new CookieContainer();
    postRequest.CookieContainer = App.Session.Cookies;

    using (var requestStream = await postRequest.GetRequestStreamAsync())
    {
        byte[] postDataArray = Encoding.UTF8.GetBytes(postData);
        await requestStream.WriteAsync(postDataArray, 0, postDataArray.Length);
    }

    var postResponse = await postRequest.GetResponseAsync() as HttpWebResponse;

    if (postResponse != null)
    {
        var postResponseStream = postResponse.GetResponseStream();
        var postStreamReader = new StreamReader(postResponseStream);

        // Can use cookies if you need
        if (cookiesContainer == null)
        {
            if (!string.IsNullOrEmpty(postResponse.Headers["YourCookieHere"]))
            {
                var cookiesCollection = postResponse.Cookies;
                // App.Session is a global object to store cookies and etc.
                App.Session.Cookies.Add(new Uri(Constants.WebServiceUrl), cookiesCollection);
            }
        }

        string response = await postStreamReader.ReadToEndAsync();
        return response;
    }
    return null;
}

必要に応じて変更できます

于 2013-02-14T12:24:08.760 に答える