Some time ago and again today, I had occasion to write an ASP.NET page that had no form in the .ASPX page but would accept and handle POST 'ed data. This was in an effort to support a REST-like interface for non-ASP.NET developers. Here's the way it turned out.
The .ASPX page looks something like this:
<%@ Page Language="C#"
AutoEventWireup="true"
CodeBehind="extract.aspx.cs"
Inherits="KeyExtractWeb.extract" %>
There is nothing else in the file. Now the code behind looks like this:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace KeyExtractWeb
{
public partial class extract : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string alldata = string.Empty;
using (StreamReader sr = new StreamReader(this.Request.InputStream))
{
alldata = sr.ReadToEnd();
}
//convert to strings - assumes URL encoded data
string[] pairs = alldata.Split('&');
NameValueCollection form = new NameValueCollection(pairs.Length);
foreach (string pair in pairs)
{
string[] keyvalue = pair.Split('=');
if (keyvalue.Length == 2)
{
form.Add(keyvalue[0], HttpUtility.UrlDecode(keyvalue[1]));
}
}
if (alldata.Length > 0 && this.Request.HttpMethod.ToUpper() == "POST")
{
if (form["text"] != null)
{
//TODO - do something with the data here
}
else
Response.Write("*** 501 Invalid data ***");
}
else
Response.Write("*** 599 GET method not supported. ***");
Response.End();
}
}
}
Well, there you have it. There are probably better ways to do this, but I didn't find one.