AN HTTP Server の使用方法 単純に、WEB アプリケーション初心者にブラウザとサーバーのやり取りを知ってもらう為に( 今は、開発者ツールがあるので途中の解説がしやすいですし )、C# で作った EXE をそのままブラウザで実行させます。 基本設定 EXE の列の『一般パスでも実行する』にチェックします 次に、一般パスに C# で作成された Debug フォルダを登録します。 後は、loclhost から実行するだけです。 ソースコード
using System; using System.Collections; using System.Text; using System.Web; namespace cgi_test { class Program { static void Main(string[] args) { string formtype = "POST"; string[] param = { }; // ****************************** // Console.WriteLine を UTF8 で // ****************************** Console.OutputEncoding = Encoding.UTF8; // ****************************** // メソッド // ****************************** string method = Environment.GetEnvironmentVariable("REQUEST_METHOD"); // ****************************** // GET // ****************************** if (method == "GET") { // ****************************** // QUERY_STRING // ****************************** string query_string = System.Environment.GetEnvironmentVariable("QUERY_STRING"); // URL のみの場合はデータ無しの QUERY_STRING を用意する if (query_string == "" ) { query_string = "field1=&field2="; } // & で分割して key=value の文字列の配列を作成する param = query_string.Split('&'); } // ****************************** // POST // ****************************** if (method == "POST") { string line; // POST 時は必ず key=value の文字列が存在する line = Console.ReadLine(); param = line.Split('&'); } // = で区切って key と value が配列の 0 と 1 にセットされる string[] key_value = { }; // ****************************** // key と value の格納 // ****************************** Hashtable field = new Hashtable(); foreach (string key_value_set in param) { key_value = key_value_set.Split('='); // key がある場合は、Hashtable に格納する if (key_value[0] != "") { // System.Web を参照して using System.Web; で HttpUtility.UrlDecode // %エンコードを元に戻す field.Add(key_value[0], HttpUtility.UrlDecode(key_value[1])); } } // ****************************** // HTTP ヘッダ // PHP の session_cache_limiter // ****************************** Console.WriteLine("Content-Type: text/html; charset=utf-8"); Console.WriteLine("Expires: Thu, 19 Nov 1981 08:52:00 GMT"); Console.WriteLine("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); Console.WriteLine("Pragma: no-cache"); Console.WriteLine(); string message = "<div>こんにちは世界</div>"; // ****************************** // HTML // $ で変数埋め込みのヒアドキュメント // ****************************** string html = $@"<!DOCTYPE html> <html> <head> </head> <body> {message} <form method='{formtype}'> <p>氏名 : <input type='text' name='field1' value='{field["field1"]}'></p> <p>フリガナ : <input type='text' name='field2' value='{field["field2"]}'></p> <p>送信 : <input type='submit' name='send' value='送信'></p> </form> </body> </html>"; // 作成した HTML を出力する Console.WriteLine(html); } } }