Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6712613
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 26, 20262026-05-26T08:16:48+00:00 2026-05-26T08:16:48+00:00

I’m trying to build a REST Client usign Async CTP. I’m new to the

  • 0

I’m trying to build a REST Client usign Async CTP. I’m new to the CTP and hence, afetr going through a number of examples on the internet, I got a clas built for just posting (GET or POST). Here is the class so far:

using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace RESTClient.Core {

    /// <summary>
    /// Submits post data to a url.
    /// </summary>
    public class PostSubmitter {

        #region Backing Store
        private string m_url = string.Empty;
        private NameValueCollection m_values = new NameValueCollection();
        private PostTypeEnum m_type = PostTypeEnum.Get;
        #endregion

        #region Constructors
        /// <summary>
        /// Default constructor.
        /// </summary>
        public PostSubmitter() {

        }

        /// <summary>
        /// Constructor that accepts a url as a parameter
        /// </summary>
        /// <param name="url">The url where the post will be submitted to.</param>
        public PostSubmitter(string url)
            : this() {
            m_url = url;
        }

        /// <summary>
        /// Constructor allowing the setting of the url and items to post.
        /// </summary>
        /// <param name="url">the url for the post.</param>
        /// <param name="values">The values for the post.</param>
        public PostSubmitter(string url, NameValueCollection values)
            : this(url) {
            m_values = values;
        }
        #endregion

        #region Properties
        /// <summary>
        /// Gets or sets the url to submit the post to.
        /// </summary>
        public string Url {
            get {
                return m_url;
            }
            set {
                m_url = value;
            }
        }

        /// <summary>
        /// Gets or sets the name value collection of items to post.
        /// </summary>
        public NameValueCollection PostItems {
            get {
                return m_values;
            }
            set {
                m_values = value;
            }
        }

        /// <summary>
        /// Gets or sets the type of action to perform against the url.
        /// </summary>
        public PostTypeEnum Type {
            get {
                return m_type;
            }
            set {
                m_type = value;
            }
        }
        #endregion

        /// <summary>
        /// Posts the supplied data to specified url.
        /// </summary>
        /// <returns>a string containing the result of the post.</returns>
        public async Task<String> Post() {
            StringBuilder parameters = new StringBuilder();
            for (int i = 0; i < m_values.Count; i++) {
                EncodeAndAddItem(ref parameters, m_values.GetKey(i), m_values[i]);
            }
            string result = await PostData(m_url, parameters.ToString());
            return result;
        }

        /// <summary>
        /// Posts the supplied data to specified url.
        /// </summary>
        /// <param name="url">The url to post to.</param>
        /// <returns>a string containing the result of the post.</returns>
        public async Task<String> Post(string url) {
            m_url = url;
            return await this.Post();
        }

        /// <summary>
        /// Posts the supplied data to specified url.
        /// </summary>
        /// <param name="url">The url to post to.</param>
        /// <param name="values">The values to post.</param>
        /// <returns>a string containing the result of the post.</returns>
        public async Task<String> Post(string url, NameValueCollection values) {
            m_values = values;
            return await this.Post(url);
        }

        /// <summary>
        /// Posts data to a specified url. Note that this assumes that you have already url encoded the post data.
        /// </summary>
        /// <param name="postData">The data to post.</param>
        /// <param name="url">the url to post to.</param>
        /// <returns>Returns the result of the post.</returns>
        private async Task<String> PostData(string url, string postData) {
            HttpWebRequest request = null;
            if (m_type == PostTypeEnum.Post) {
                Uri uri = new Uri(url);
                request = (HttpWebRequest)WebRequest.Create(uri);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = postData.Length;
                using (Stream writeStream = await request.GetRequestStreamAsync()) {
                    UTF8Encoding encoding = new UTF8Encoding();
                    byte[] bytes = encoding.GetBytes(postData);
                    writeStream.Write(bytes, 0, bytes.Length);
                }
            }
            else {
                Uri uri = new Uri(url + "?" + postData);
                request = (HttpWebRequest)WebRequest.Create(uri);
                request.Method = "GET";
            }

            string result = string.Empty;

            using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) {
                using (Stream responseStream = response.GetResponseStream()) {
                    using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8)) {
                        result = readStream.ReadToEnd();
                    }
                }
            }

            return result;
        }

        /// <summary>
        /// Encodes an item and ads it to the string.
        /// </summary>
        /// <param name="baseRequest">The previously encoded data.</param>
        /// <param name="dataItem">The data to encode.</param>
        /// <returns>A string containing the old data and the previously encoded data.</returns>
        private void EncodeAndAddItem(ref StringBuilder baseRequest, string key, string dataItem) {
            if (baseRequest == null) {
                baseRequest = new StringBuilder();
            }
            if (baseRequest.Length != 0) {
                baseRequest.Append("&");
            }
            baseRequest.Append(key);
            baseRequest.Append("=");
            baseRequest.Append(HttpUtility.UrlEncode(dataItem));
        }

    }

}

And this is how I’m using it:

    private void ButtonSubmit_Click(object sender, EventArgs e) {
        ButtonReset.Enabled = false;
        TextResponse.Text = String.Empty;
        TextResponse.Text += "Begining..." + Environment.NewLine;

        try {
            TextResponse.Text += Task.Factory.StartNew(() => PostSomeData().Wait());
            //TextResponse.Text +=  PostSomeData();
            TextResponse.Text += Environment.NewLine;
            TextResponse.Text += "Function Done!" + Environment.NewLine;
        }
        catch (Exception ex) {
            TextResponse.Text += "Exception!" + Environment.NewLine + "Message: " + ex.Message + Environment.NewLine;
        }
        finally {
            ButtonReset.Enabled = true;
            TextResponse.Text += "Function Ended!";
        }
    }

    private async Task<String> PostSomeData() {
        PostSubmitter post = new PostSubmitter();
        post.Url = TextURL.Text.Trim();

        post.PostItems.Add(TextParam01.Text.Trim(), TextValue01.Text.Trim());
        post.PostItems.Add(TextParam02.Text.Trim(), TextValue02.Text.Trim());
        post.PostItems.Add(TextParam03.Text.Trim(), TextValue03.Text.Trim());
        post.PostItems.Add(TextParam04.Text.Trim(), TextValue04.Text.Trim());
        post.PostItems.Add(TextParam05.Text.Trim(), TextValue05.Text.Trim());
        post.PostItems.Add(TextParam06.Text.Trim(), TextValue06.Text.Trim());
        post.PostItems.Add(TextParam07.Text.Trim(), TextValue07.Text.Trim());
        post.PostItems.Add(TextParam08.Text.Trim(), TextValue08.Text.Trim());
        post.PostItems.Add(TextParam09.Text.Trim(), TextValue09.Text.Trim());
        post.PostItems.Add(TextParam10.Text.Trim(), TextValue10.Text.Trim());
        post.PostItems.Add(TextParam11.Text.Trim(), TextValue11.Text.Trim());
        post.PostItems.Add(TextParam12.Text.Trim(), TextValue12.Text.Trim());
        post.Type = PostTypeEnum.Post;

        return await post.Post();
    }

The behaviour is not quite as expected. The line TextResponse.Text += Task.Factory.StartNew(() => PostSomeData().Wait()); whiz-by and I get no exceptions and here is the resulting string:

Begining…
System.Threading.Tasks.Task
Function Done!
Function Ended!

Now, if I’m using a POST, I get an exception after the above. Digging into the exception reveals a 500 Internal Server Error

However, if i’m using GET, nothing happens. No exception and just the same final result.

Am I doing something wrong in the PostSubmitter Class?

Here is the UI shot with the paramaeters:
UI Screen Shot

Regards.

Update #1
I have modified the click event on the UI as well. However

  • It only works if the PostType is GET. POST is not working.
  • The UI hangs while the operation lasts

The modifications:

    private async void ButtonSubmit_Click(object sender, EventArgs e) {
        ButtonReset.Enabled = false;
        TextResponse.Text = String.Empty;
        TextResponse.Text += "Begining..." + Environment.NewLine;

        try {
            TextResponse.Text += await PostSomeData();
            TextResponse.Text += Environment.NewLine;
            TextResponse.Text += "Function Done!" + Environment.NewLine;
        }
        catch (Exception ex) {
            TextResponse.Text += "Exception!" + Environment.NewLine + "Message: " + ex.Message + Environment.NewLine;
        }
        finally {
            ButtonReset.Enabled = true;
            TextResponse.Text += "Function Ended!";
        }
    }
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-26T08:16:49+00:00Added an answer on May 26, 2026 at 8:16 am

    Your code is only partially asynchronous; take a good look at PostData.

    In particular, ReadToEnd needs to be asynchronous:

    private async Task<String> PostData(string url, string postData)
    {
      HttpWebRequest request = null;
      if (m_type == PostTypeEnum.Post)
      {
        Uri uri = new Uri(url);
        request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = postData.Length;
        using (Stream writeStream = await request.GetRequestStreamAsync())
        {
          UTF8Encoding encoding = new UTF8Encoding();
          byte[] bytes = encoding.GetBytes(postData);
          await writeStream.WriteAsync(bytes, 0, bytes.Length);
        }
      }
      else
      {
        Uri uri = new Uri(url + "?" + postData);
        request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "GET";
      }
    
      using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
      using (Stream responseStream = response.GetResponseStream())
      using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
      {
        return await readStream.ReadToEndAsync();
      }
    }
    

    This is in addition to making your event handler asynchronous, as others have mentioned.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am trying to loop through a bunch of documents I have to put
I am trying to understand how to use SyndicationItem to display feed which is
Basically, what I'm trying to create is a page of div tags, each has
I'm new to using the Perl treebuilder module for HTML parsing and can't figure
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
I am trying to render a haml file in a javascript response like so:
I want use html5's new tag to play a wav file (currently only supported
I'm parsing an RSS feed that has an &#8217; in it. SimpleXML turns this
We're building an app, our first using Rails 3, and we're having to build

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.