ASP.NET MVC Windowsフォームからのリクエスト
概要
クライアント側がブラウザではなく、Windowsフォームを使用する例
GET
※MVCプロジェクト
namespace MyMVC.Controllers
{
クライアントからのリクエストを制御
public class TestController : Controller
{
public string Do(string prm)
{
ActionResult型でなく、文字列型を返す
return prm;
}
}
}
クライアントからのパラメータの振り分け先設定
namespace MyMVC
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{prm}",
defaults: new { controller = "Test", action = "Do", prm = UrlParameter.Optional }
);
}
}
}
※Windowsフォームプロジェクト
WebRequest作成
var req = WebRequest.Create(@"http://localhost:12345/Test/Do/AAA");
本来はブラウザで指定するURLをWebRequestに設定
(AAAはパラメータ)
WebResponse作成
var res = req.GetResponse();
応答データ受信の為のStreamを取得
Stream st = res.GetResponseStream();
文字コード指定、StreamReader作成
StreamReader sr = new StreamReader(st, Encoding.UTF8);
データ受信
string htmlSource = sr.ReadToEnd();
MessageBox.Show(htmlSource);
→AAA
終了処理
sr.Close();
st.Close();
res.Close();
POST
WebRequestの作成
WebRequest req = WebRequest.Create("http://localhost:12345/Test/Do");
本来はブラウザで指定するURLをWebRequestに設定
POST送信する文字列をバイト型配列に変換
byte[] postDataBytes = Encoding.ASCII.GetBytes("AAA");
メソッドにPOSTを指定
req.Method = "POST";
ContentTypeを"application/x-www-form-urlencoded"に
req.ContentType = "application/x-www-form-urlencoded";
POST送信するデータの長さを指定
req.ContentLength = postDataBytes.Length;
POST送信の為のStreamを取得
Stream reqStream = req.GetRequestStream();
送信するデータ書き込み
reqStream.Write(postDataBytes, 0, postDataBytes.Length);
reqStream.Close();
リクエストメッセージ取得
WebResponse res = req.GetResponse();
↑ 受信データからStreamを取得
Stream resStream = res.GetResponseStream();
読み込み
StreamReader sr = new StreamReader(resStream, Encoding.GetEncoding("shift_jis");
MessageBox.Show(sr.ReadToEnd());
→AAA
終了処理
sr.Close();
※MVCプロジェクト
namespace MyMVC.Controllers
{
クライアントからのリクエストを制御
public class TestController : Controller
{
[HttpPost]
public string Do()
{
Request.InputStream.Position = 0;
using (StreamReader reader = new StreamReader(Request.InputStream, Encoding.UTF8))
{
string output = reader.ReadToEnd();
ActionResult型でなく、文字列型を返す
return output;
}
}
}
}