WindowsFormApplicationにてhttpサーバーを作成してクライアントから送られてくるPOSTデータを取得したいと思います
Visual Studio の Windows forms applicationにてHTTPサーバーを建てようと思っています。
クライアント側からPOSTMethodにてデータを送信。
受信したサーバー側はまずGET、POSTどちらのMethodでリクエストが来たかを取得してPOSTであればテキストボックスに値を表示する。
また、POST、GETに関わらず必ずテキストファイルの中身を返す。
このような簡易的なサーバーをテストで建ててみようと思います。
現状
①HttpListenerRequestにHttpMethodメソッドをstring型の変数に代入。
②代入した値を文字列比較。(POSTかそれ以外か)
③POSTならテキストボックスに表示。←ここが実装できない
④HttpListenerResponseのOutputStreamにてPATHの中のテキストファイルの中身を最後まで送る。
という感じです。
以下サイトを参考にしましたが、Request.Formが使えず困っています。
C#でHTTP Postデータを取得する方法は?
参照できていないのかと思ったので参照を追加しています。
名前空間にもSystem.webを入れていますがコンパイルエラーが解決しないので不思議に感じています。
Requestはいったい何者なんですかね...
そうか、変数名なのか!
そう思ったので以下リンクまでたどり着きましたが、フォームコレクション内の値を取得と書いていましたので違う...?
HttpRequest.Form プロパティ
今回ほしいのはあくまでBodyのUTF-8のデータが欲しい...
まだクライアント側作成していないのでbody内の話とFormの話が一緒なのかすらわかっていません(知識不足すいません)
POSTデータを取得したいと思いますがRequestがメソッドなのか変数なのか、使えるのか使えないのかがわかりません。
何か知っていることがあれば教え頂けると幸いです。
該当のソースコード
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using System.Threading; 11using System.Net.Sockets; 12using System.Net; 13using System.Diagnostics; 14using System.Windows; 15using System.IO; 16using System.Net.Http; 17using System.Net.WebSockets; 18using System.Web; 19using System.Collections.Specialized; 20 21 22 23 24namespace webServerTest 25{ 26 public partial class Form1 : Form 27 { 28 public Form1() 29 { 30 InitializeComponent(); 31 } 32 33 private void button1_Click(object sender, EventArgs e) 34 { 35 Thread thread = new Thread(connect); 36 thread.Start(); 37 } 38 39 private void connect() 40 { 41 42 HttpListener listtner = new HttpListener(); 43 //とりあえずローカル 44 listtner.Prefixes.Add("http://*:80/"); 45 listtner.Start(); 46 47 48 while (true) 49 { 50 HttpListenerContext context = listtner.GetContext(); 51 52 HttpListenerRequest req = context.Request; 53 HttpListenerResponse res = context.Response; 54 55 //クライアントからの接続メソッド?判別 56 string str = req.HttpMethod; 57 58 59 if(str == "POST") 60 { 61 //string postData = Request.Form["key"]; ← Requestコンパイルエラーで使えない... 62 Invoke((Action)(() => 63 { 64 txtURL.Text = ""; //TODO postで送られたときにデータを格納 65 })); 66 } 67 68 //textファイルのパス 69 string path = @"C:\Users\TESTHTTP.txt"; 70 if (File.Exists(path)) 71 { 72 //textファイルの中身をバイト型の配列に格納 73 byte[] data = File.ReadAllBytes(path); 74 //dataの中身をRESPONSEとして返す 75 res.OutputStream.Write(data, 0, data.Length); 76 } 77 res.Close(); 78 79 } 80 } 81 82 } 83} 84 85
補足情報(FW/ツールのバージョンなど)
visualstudioは2015です
回答2件
あなたの回答
tips
プレビュー