deanvmc
deanvmc

Reputation: 6095

Some help posting to ASP.NET Web API with C#

I have been playing with ASP.NET Web API. I am looking to see can I post to a method I have built which simply returns back the object I have POSTED:

On The Accounts Controller:

// POST /api/accounts
public Account Post(Account account)
{
   return account;

}

Code Used To Post:

    public void PostAccount()
    {
        // http://local_ip/api/accounts
        var uri = string.Format("{0}", webServiceRoot); 


        var acc = new Account();
        acc.AccountID = "8";
        acc.AccountName = "Mitchel Cars";
        acc.AccountNumber = "600123801";
        acc.SubscriptionKey = "2535-8254-8568-1192";
        acc.ValidUntil = DateTime.Now;


        var request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/xml";
        request.ContentLength = 800;

        XmlSerializer xmlSerializer = new XmlSerializer(typeof(Account));
        xmlSerializer.Serialize(request.GetRequestStream(), acc);

        var response = (HttpWebResponse)request.GetResponse();

        XmlSerializer serializer = new XmlSerializer(typeof(Account));

        var newAcc = (Account)serializer.Deserialize(response.GetResponseStream());

    }

I have removed any error checking or any boiler plate code to make it easier to read. This is strictly a spike just to under stand to to actually POST. My understanding is that you should write to the GetRequestStream(). All the reading and such seems to work ok but I never here back from the request.GetResponse();

If I do a simple get it works fine. I did see you can use a class called HTTPClient for doing this stuff but I can't use it as I need to get this working for WinForms, Silverlight and Windows Phone all based on .Net 3.5

Any help pushing POCO's to the server would be a great help, cheers!

ADDITIONAL INFO:

Upvotes: 2

Views: 3361

Answers (2)

Darrel Miller
Darrel Miller

Reputation: 142232

You will need to close the response stream. Most examples I see also show setting the content length. You may be better to serialize to a memory stream and then use the length of that stream as the Content-Length. Unfortunately in .net 3.5 there is no CopyStream so you may have to write that yourself.

Upvotes: 2

ps.
ps.

Reputation: 4360

If you want to use the HttpClient, you can install the download the REST starter Kit. and use the DLLs as external DLLs

http://forums.asp.net/t/1680252.aspx/1

Upvotes: 0

Related Questions