In this article I will explain with an example, how to perform HTTP POST operation to REST WCF Service (SVC) in ASP.Net with C# and VB.Net.
	
		This article will illustrate how to send and receive JSON data by doing HTTP POST to a JSON REST WCF Service (SVC) using WebClient class and HttpWebRequest class in ASP.Net with C# and VB.Net.
	
		 
	
		 
	
		Adding Service to Project
	
		The very first thing you need to do is add a WCF service to your project by clicking on Add New Items as shown below.
	![Perform HTTP POST to REST WCF Service (SVC) in ASP.Net using C# and VB.Net]() 
	
		 
	
		 
	
		Configuring the WCF Service 
	
		A new Endpoint Behavior named ServiceHttpBehavior is added to the Web.Config. This behavior will set the binding to WebHttpBinding, which is very important in order to accessing WCF Service using HTTP methods.
	
		
			<system.serviceModel>
		
			<behaviors>
		
			    <serviceBehaviors>
		
			    <behavior name="ServiceBehavior">
		
			        <serviceMetadata httpGetEnabled="true"/>
		
			        <serviceDebug includeExceptionDetailInFaults="false"/>
		
			    </behavior>
		
			    </serviceBehaviors>
		
			    <endpointBehaviors>
		
			    <behavior name="ServiceHttpBehavior">
		
			        <enableWebScript/>
		
			    </behavior>
		
			    </endpointBehaviors>
		
			</behaviors>
		
			<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
		
			<services>
		
			    <service behaviorConfiguration="ServiceBehavior" name="Service">
		
			    <endpoint address="" binding="webHttpBinding" contract="IService" behaviorConfiguration="ServiceHttpBehavior">
		
			    </endpoint>
		
			    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
		
			    </service>
		
			</services>
		
			</system.serviceModel>
	 
	
		 
	
		 
	
		Building the WCF Service Method
	
		The IService Interface has a method GetData which is decorated with OperationContract attribute.
	
		The IService Interface has been implemented in a class named Service which contains the definition of the GetData method.
	
		This method accepts the Name and Age parameters and then wraps them into a JSON object along with the Current DateTime and returns it back in the form of serialized JSON string.
	
		C#
	
		IService.cs
	
		
			using System;
		
			using System.ServiceModel;
		
			using System.ServiceModel.Web;
		
			using System.Web.Script.Serialization;
		
			 
		
			[ServiceContract]
		
			public interface IService
		
			{
		
			    [OperationContract]
		
			    string GetData(string name, int age);
		
			}
	 
	
		 
	
		Service.cs
	
		
			using System;
		
			using System.ServiceModel;
		
			using System.ServiceModel.Web;
		
			using System.Web.Script.Serialization;
		
			 
		
			public class Service : IService
		
			{
		
			    public string GetData(string name, int age)
		
			    {
		
			        object data = new
		
			                        {
		
			                            Name = name,
		
			                            Age = age,
		
			                            TimeStamp = DateTime.Now.ToString()
		
			                        };
		
			 
		
			        return (new JavaScriptSerializer().Serialize(data));
		
			    }
		
			}
	 
	
		 
	
		VB.Net
	
		IService.vb
	
		
			Imports System.ServiceModel
		
			 
		
			<ServiceContract()>
		
			Public Interface IService
		
			    <OperationContract()>
		
			    Function GetData(name As String, age As Integer) As String
		
			End Interface
	 
	
		 
	
		Service.vb
	
		
			Imports System.Web.Script.Serialization
		
			 
		
			Public Class Service
		
			    Implements IService
		
			    Public Function GetData(name As String, age As Integer) As String Implements IService.GetData
		
			        Dim data As Object = New With { _
		
			                         .Name = name, _
		
			                         .Age = age, _
		
			                         .TimeStamp = DateTime.Now.ToString() _
		
			        }
		
			 
		
			        Return (New JavaScriptSerializer().Serialize(data))
		
			    End Function
		
			End Class
	 
	
		 
	
		 
	
		Performing HTTP POST using WebClient 
	
		The following explains how to perform HTTP POST operation using the WebClient class.
	
		Namespaces
	
		You will need to import the following namespaces.
	
		C#
	
		
			using System.Net;
		
			using System.Text;
		
			using System.Web.Script.Serialization;
	 
	
		 
	
		VB.Net
	
		
			Imports System.Net
		
			Imports System.Text
		
			Imports System.Web.Script.Serialization
	 
	
		 
	
		HTML Markup
	
		The HTML Markup consists of two TextBoxes for capturing Name and Age values, a Button and a Label for displaying the returned JSON data.
	
		
			<table border="0" cellpadding="2" cellspacing="0">
		
			    <tr>
		
			        <td>Name:</td>
		
			        <td><asp:TextBox ID="txtName" runat="server" /></td>
		
			    </tr>
		
			    <tr>
		
			        <td>Age:</td>
		
			        <td><asp:TextBox ID="txtAge" runat="server" /></td>
		
			    </tr>
		
			    <tr>
		
			        <td></td>
		
			        <td><asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClick="Submit" /></td>
		
			    </tr>
		
			    <tr>
		
			        <td valign = "top">Output:
		
			        </td>
		
			        <td style = "width:255px;word-break:break-all">
		
			            <asp:Label ID="lblOutput" runat="server" Font-Names="courier new" />
		
			        </td>
		
			    </tr>
		
			</table>
	 
	
		 
	
		Code
	
		When the Submit Button is clicked, the values of the Name and Age TextBoxes are wrapped into a JSON object which is then serialized into a JSON string.
	
		The URL of the WCF Service along with its method and the serialized JSON string is passed to the UploadString method of the WebClient class.
	
		The UploadString method of the WebClient class calls the WCF Service’s GetData method and returns the JSON string which is then displayed in the Label.
	
		C#
	
		
			protected void Submit(object sender, EventArgs e)
		
			{
		
			    string serviceUrl = "http://localhost:17154/CS/Services/Service.svc";
		
			    object input = new
		
			                    {
		
			                        name = txtName.Text.Trim(),
		
			                        age = txtAge.Text.Trim()
		
			                    };
		
			    string inputJson = (new JavaScriptSerializer()).Serialize(input);
		
			    WebClient client = new WebClient();
		
			    client.Headers["Content-type"] = "application/json";
		
			    client.Encoding = Encoding.UTF8;
		
			    lblOutput.Text = client.UploadString(serviceUrl + "/GetData", inputJson);
		
			}
	 
	
		 
	
		VB.Net
	
		
			Protected Sub Submit(sender As Object, e As EventArgs)
		
			    Dim serviceUrl As String = "http://localhost:17157/VB/Services/Service.svc"
		
			    Dim input As Object = New With { _
		
			                    .name = txtName.Text.Trim(), _
		
			                    .age = txtAge.Text.Trim() _
		
			    }
		
			    Dim inputJson As String = (New JavaScriptSerializer()).Serialize(input)
		
			    Dim client As New WebClient()
		
			    client.Headers("Content-type") = "application/json"
		
			    client.Encoding = Encoding.UTF8
		
			    lblOutput.Text = client.UploadString(serviceUrl & "/GetData", inputJson)
		
			End Sub
	 
	
		 
	
		 
	
		Performing HTTP POST using HttpWebRequest
	
		The following explains how to perform HTTP POST operation using the HttpWebRequest class.
	
		Namespaces
	
		You will need to import the following namespaces.
	
		C#
	
		
			using System.Net;
		
			using System.Text;
		
			using System.Web.Script.Serialization;
	 
	
		 
	
		VB.Net
	
		
			Imports System.Net
		
			Imports System.Text
		
			Imports System.Web.Script.Serialization
	 
	
		 
	
		HTML Markup
	
		The HTML Markup consists of two TextBoxes for capturing Name and Age values, a Button and a Label for displaying the returned JSON data.
	
		
			<table border="0" cellpadding="2" cellspacing="0">
		
			    <tr>
		
			        <td>Name:</td>
		
			        <td><asp:TextBox ID="txtName" runat="server" /></td>
		
			    </tr>
		
			    <tr>
		
			        <td>Age:</td>
		
			        <td><asp:TextBox ID="txtAge" runat="server" /></td>
		
			    </tr>
		
			    <tr>
		
			        <td></td>
		
			        <td><asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClick="Submit" /></td>
		
			    </tr>
		
			    <tr>
		
			        <td valign="top">Output:
		
			        </td>
		
			        <td style="width:255px; word-break:break-all">
		
			            <asp:Label ID="lblOutput" runat="server" Font-Names="courier new" />
		
			        </td>
		
			    </tr>
		
			</table>
	 
	
		 
	
		Code
	
		When the Submit Button is clicked, the values of the Name and Age TextBoxes are wrapped into a JSON object which is then serialized into a JSON string.
	
		A new object of the HttpWebRequest class, and the URL of the WCF Service along with its method is passed as parameter.
	
		Then the serialized JSON string is converted to Byte array using UTF8 Encoding.
	
		Now a HTTP POST request is made using the GetRequestStream method of the HttpWebRequest class.
	
		Finally the response is received into a Stream class object by making use of the GetResponseStream method of the HttpWebRequest class.
	
		The Stream class object is read using StreamReader and is displayed using the Label control.
	
		C#
	
		
			protected void Submit(object sender, EventArgs e)
		
			{
		
			    string serviceUrl = "http://localhost:17754/CS/Services/Service.svc";
		
			    object input = new
		
			                    {
		
			                        name = txtName.Text.Trim(),
		
			                        age = txtAge.Text.Trim()
		
			                    };
		
			    string inputJson = (new JavaScriptSerializer()).Serialize(input);
		
			 
		
			    HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(new Uri(serviceUrl + "/GetData"));
		
			    httpRequest.Accept = "application/json";
		
			    httpRequest.ContentType = "application/json";
		
			    httpRequest.Method = "POST";
		
			 
		
			    byte[] bytes = Encoding.UTF8.GetBytes(inputJson);
		
			 
		
			    using (Stream stream = httpRequest.GetRequestStream())
		
			    {
		
			        stream.Write(bytes, 0, bytes.Length);
		
			        stream.Close();
		
			    }
		
			 
		
			    using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse())
		
			    {
		
			        using (Stream stream = httpResponse.GetResponseStream())
		
			        {
		
			            lblOutput.Text = (new StreamReader(stream)).ReadToEnd();
		
			        }
		
			    }
		
			}
	 
	
		 
	
		VB.Net
	
		
			Protected Sub Submit(sender As Object, e As EventArgs)
		
			    Dim serviceUrl As String = "http://localhost:17757/VB/Services/Service.svc"
		
			    Dim input As Object = New With { _
		
			                    .name = txtName.Text.Trim(), _
		
			                    .age = txtAge.Text.Trim() _
		
			    }
		
			    Dim inputJson As String = (New JavaScriptSerializer()).Serialize(input)
		
			 
		
			    Dim httpRequest As HttpWebRequest = DirectCast(WebRequest.Create(New Uri(serviceUrl & "/GetData")), HttpWebRequest)
		
			    httpRequest.Accept = "application/json"
		
			    httpRequest.ContentType = "application/json"
		
			    httpRequest.Method = "POST"
		
			 
		
			    Dim bytes As Byte() = Encoding.UTF8.GetBytes(inputJson)
		
			 
		
			    Using stream As Stream = httpRequest.GetRequestStream()
		
			        stream.Write(bytes, 0, bytes.Length)
		
			        stream.Close()
		
			    End Using
		
			 
		
			    Using httpResponse As HttpWebResponse = DirectCast(httpRequest.GetResponse(), HttpWebResponse)
		
			        Using stream As Stream = httpResponse.GetResponseStream()
		
			            lblOutput.Text = (New StreamReader(stream)).ReadToEnd()
		
			        End Using
		
			    End Using
		
			End Sub
	 
	
		 
	
		 
	
		Screenshot
	![Perform HTTP POST to REST WCF Service (SVC) in ASP.Net using C# and VB.Net]() 
	
		 
	
		 
	
		Demo
	
	
		 
	
		 
	
		Downloads