簡體   English   中英

WP7使用POST方法創建幫助程序類以便於使用HttpWebRequest

[英]WP7 Create helper class for easy use HttpWebRequest with POST method

其實我有這樣的事情:

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行代碼中執行此操作,該怎么辦? 你會怎么做? 我正在考慮這種方式,但如何在響應之前添加請求? 或者你會以另一種方式做到嗎? 謝謝

是的,最好使用asyncawait 這是一個這樣的包裝器的例子:

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;
}

您可以根據需要進行修改

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM