Wer immer wie ich grade ein eigenes CGI für den IIS schreiben bzw. programmieren möchte. Aber vorsicht stellenweise wirklich sehr ehm – bastelig
.
Understanding CGI with C# – The Code Project – C# Programming
Im folgenden angehängt habe ich auch noch die .NET Klasse die ich zum Verwalten der Variablen verwende, vielleicht kann ja jemand auszugsweise was davon gebrauchen
/* * Created by Application-Factory (http://www.application-factory.de). * User: AM * Date: 10.10.2005 * Time: 16:29 * */ using System; using System.Collections; using System.Runtime.InteropServices; using System.Threading; using System.Web; namespace CGIIIS { public struct IValList { public string Name,Wert,Typ; public IValList(string N,string W, string T) { Name = N; Wert = W; Typ = T; } } /// <summary> /// Description of VarLocalizer. /// </summary> public class VarLocalizer { [DllImport("kernel32", SetLastError=true)] static extern int SetConsoleMode (int hConsoleHandle, int dwMode); private static string PostData; private static int PostLength; private static int LengthCompare; private static ArrayList dvar = new ArrayList(); public static void SetConsoleForPost() { SetConsoleMode(3, 0); } public static string Sanitize(string Raw) { string Clean = ""; int Walk; char[] ByCharacter; if(Raw == null)return Clean; Raw=Raw.Replace("%22", "\""); Raw=Raw.Replace("%27", "'"); Raw=Raw.Replace(",", ",");Raw=Raw.Replace("%2C", ","); Raw=Raw.Replace(""", "\"");Raw=Raw.Replace(""", "\"");Raw=Raw.Replace("%5C", "\\"); Raw=Raw.Replace("<", "<");Raw=Raw.Replace("<", "<");Raw=Raw.Replace("+", " ");Raw=Raw.Replace("%3C", "<"); Raw=Raw.Replace(">", ">");Raw=Raw.Replace(">", ">");Raw=Raw.Replace("3E", ">"); Raw=Raw.Replace(" ", " ");Raw=Raw.Replace(" ", " "); Raw=Raw.Replace("%21", "!");Raw=Raw.Replace("%40", "@");Raw=Raw.Replace("%23", "#"); Raw=Raw.Replace("%24", "$");Raw=Raw.Replace("%5E", "^");Raw=Raw.Replace("%28", "("); Raw=Raw.Replace("%29", ")");Raw=Raw.Replace("%25", "%");Raw=Raw.Replace("%2F", "/"); Raw=Raw.Replace("%3F", "?");Raw=Raw.Replace("%3B", ";");Raw=Raw.Replace("%3A", ":"); Raw=Raw.Replace("%5D", "]");Raw=Raw.Replace("%5B", "[");Raw=Raw.Replace("%7D", "}"); Raw=Raw.Replace("%7B", "{");Raw=Raw.Replace("%7C", "|");Raw=Raw.Replace("%3D", "="); Raw=Raw.Replace("%2B", "+");Raw=Raw.Replace("%7E", "~");Raw=Raw.Replace("%60", "`"); Raw=Raw.Replace("&", "&");Raw=Raw.Replace("&", "&");Raw=Raw.Replace("%26", "^"); ByCharacter = Raw.ToCharArray(); for(Walk = 0; Walk < Raw.Length;Walk++) { if(ByCharacter[Walk] == '\'') Clean += "'"; else if(ByCharacter[Walk] == '"') Clean += "\""; else if(ByCharacter[Walk] == ' ') Clean += " "; else if(ByCharacter[Walk] == '&') Clean += "<br />"; else if(ByCharacter[Walk] >= 'A' && ByCharacter[Walk] <= 'z' || ByCharacter[Walk] >= '0' && ByCharacter[Walk] <= '9' || ByCharacter[Walk] == '=' || ByCharacter[Walk] == ',' || ByCharacter[Walk] == '.' || ByCharacter[Walk] == '@' || ByCharacter[Walk] == '#') Clean += ByCharacter[Walk].ToString(); else Clean += "^"; } return Clean; } // End of sanitize() method. public static void SetPostLength(int length) { PostLength = length; } public static void StartPostDataThread() { ThreadStart ThreadDelegate = new ThreadStart(GatherPostThread); Thread PostThread = new Thread(ThreadDelegate); LengthCompare = PostLength; if(PostLength>0) PostThread.Start(); } public static void GatherPostThread() { if(PostLength > 2048) PostLength = 2048; // Max length for POST data for security. for(;PostLength>0;PostLength--) PostData += Convert.ToChar(Console.Read()).ToString(); } public static void checkPostThread() { while(PostLength > 0) { Thread.Sleep(100); if(PostLength < LengthCompare) { LengthCompare = PostLength; } else { PostData += "Error with POST data or connection problem."; break; } } } public static string getPostData() { return PostData; } public static void CloseAllThreads() { Environment.Exit(0); } public static string getValue(string name) { string backout = ""; if (dvar.Count > 0) { for (int i=0; i < dvar.Count; i++) { IValList neu = (IValList)dvar[i]; if (neu.Name == name) { backout = neu.Wert; } } } return backout; } public static bool ValExists(string name) { bool backout = false; if (dvar.Count > 0) { for (int i=0; i < dvar.Count; i++) { IValList neu = (IValList)dvar[i]; if (neu.Name == name) { backout = true; } } } return backout; } public static int getInt(string name) { return int.Parse(getValue(name)); } public static float getFloat(string name) { return float.Parse(getValue(name)); } public static string getString(string name) { return getValue(name); } public static byte getByte(string name) { return byte.Parse(getValue(name)); } public static void setValue(string n,string w, string typ) { if ((n != null) && (w != null)) { IValList neu = new IValList(n,w,typ.ToUpper()); dvar.Add(neu); } } public static void setValue(string n,string w) { setValue(n,w,"INTERNAL"); } public static void reWorkGetData(string QueryGet) { if (QueryGet != null) { if (QueryGet.Length > 0) { string delimiterVar = "&"; char[] delimArrVar = delimiterVar.ToCharArray(); string[] VarSplit; VarSplit = QueryGet.Split(delimArrVar); foreach (string s in VarSplit) { string delimSingle = "="; char[] delimSArr = delimSingle.ToCharArray(); string[] VarSingle; if (s.Length > 0) { VarSingle = s.Split(delimSArr); IValList neu = new IValList(VarSingle[0],HttpUtility.UrlDecode(VarSingle[1],System.Text.Encoding.Default),"GET"); dvar.Add(neu); } } } } } public static void reWorkPostData(string PostString) { if (PostString != null) { if (PostString.Length > 0) { string delimiterVar = "&"; char[] delimArrVar = delimiterVar.ToCharArray(); string[] VarSplit; VarSplit = PostString.Split(delimArrVar); foreach (string s in VarSplit) { string delimSingle = "="; char[] delimSArr = delimSingle.ToCharArray(); string[] VarSingle; VarSingle = s.Split(delimSArr); IValList neu = new IValList(VarSingle[0],HttpUtility.UrlDecode(VarSingle[1],System.Text.Encoding.Default),"POST"); dvar.Add(neu); } } } } public static void reWorkParameters(string[] lvar) { // should localize string int i = 0; foreach (string s in lvar) { dvar.Add(new IValList(s,s,"PARAMETER")); i++; } } public static ArrayList getList() { return dvar; } private static string LinkString(string newset, string vtyp) { string outp = ""; bool firstone = true; if (dvar.Count > 0) { for (int i=0; i < dvar.Count; i++) { IValList neu = (IValList)dvar[i]; if ((neu.Typ.ToLower() == vtyp.ToLower()) && (neu.Name.ToLower() != newset.ToLower()) ) { if (firstone) { if (neu.Wert.Length > 0) { outp += neu.Name+"="+neu.Wert; firstone = false; } } else { if (neu.Wert.Length > 0) { outp += "&" + neu.Name+"="+HttpUtility.UrlEncode(neu.Wert,System.Text.Encoding.Default); } } } } } return outp; } private static string LinkString(string[] newset, string vtyp) { string outp = ""; bool firstone = true; if (dvar.Count > 0) { for (int i=0; i < dvar.Count; i++) { IValList neu = (IValList)dvar[i]; if (neu.Typ.ToLower() == vtyp.ToLower()) { bool isIn = false; for (int j=0; j < newset.Length; j++) { if (neu.Name.ToLower() == newset[j].ToLower()) isIn = true; } if (isIn == false) { if (firstone) { if (neu.Wert.Length > 0) { outp += neu.Name+"="+neu.Wert; firstone = false; } } else { if (neu.Wert.Length > 0) { outp += "&" + neu.Name+"="+HttpUtility.UrlEncode(neu.Wert,System.Text.Encoding.Default); } } } } } } return outp; } public static string LinkGetString(string newset) { return LinkString(newset,"get"); } public static string LinkGetString(string[] newset) { return LinkString(newset,"get"); } public static string LinkGetString() { return LinkGetString(""); } public static string LinkPostString(string newset) { return LinkString(newset,"post"); } public static string LinkPostString(string[] newset) { return LinkString(newset,"post"); } public static string LinkPostString() { return LinkPostString(""); } public static string LinkAllString(string newsset) { string outp = LinkGetString(newsset); outp += "&" + LinkPostString(newsset); return outp; } public static string LinkAllString(string[] newsset) { string outp = LinkGetString(newsset); outp += "&" + LinkPostString(newsset); return outp; } public static string LinkAllString() { return LinkAllString(""); } public VarLocalizer() { } } }
