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;
   }
  }
 }
}