13.11. Simulating Form Execution

Problem

You need to send a collection of name/value pairs to simulate a form being executed on a browser to a location identified by a URI.

Solution

Use the WebClient class to send a set of name/value pairs to the web server using the UploadValues method. This class enables you to act as the browser executing a form by setting up the name/value pairs with the input data. The input field ID is the name, and the value to use in the field is the value:

using System;
using System.Net;
using System.Text;
using System.Collections.Specialized;

Uri uri = new Uri("http://localhost/FormSim/WebForm1.aspx");
WebClient client = new WebClient( );

// Create a series of name/value pairs to send
NameValueCollection collection = new NameValueCollection( );

// Add necessary parameter/value pairs to the name/value container.
collection.Add("Identity","foo@bar.com");            
collection.Add("Item","Books");            
collection.Add("Quantity","5");            
Console.WriteLine("Uploading name/value pairs to URI {0} ...",
                        uri.AbsoluteUri);                        

// Upload the NameValueCollection.
byte[] responseArray = 
    client.UploadValues(uri.AbsoluteUri,"POST",collection);
// Decode and display the response.
Console.WriteLine("\nResponse received was {0}",
    Encoding.ASCII.GetString(responseArray));

The webform1.aspx page to receive and process this data looks like this:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="FormSim.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.