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.
Page rendered at Tuesday, January 06, 2009 12:08:42 AM (Mountain Standard Time, UTC-07:00)
DisclaimerThe opinions expressed herein are just that, opinions. Don't have a fit if you think they're wrong. Post your comment or write your own blog.