normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

ASP.NET MVC4 の Web API を学んでみる その2 〜GET/POST のバインド〜

前回の記事に引き続き、 GET と POST でのバインドについて紹介する。ソースコードベースで紹介させて頂くが、必要な場合は是非サンプルアプリケーションを動作させて確認してほしい。

GET における基本的なバインド方式

簡単な GET のバインドを確認しよう。ソースコード内のコメントに詳細を記載したので、解説は不要だと思う。

  • ValuesController.cs の抜粋
    public class ValuesController : ApiController
    {
        // GET /api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET /api/values/5
        public string Get(int id)
        {
            Debug.WriteLine("☆☆ id = " + id);
            return "value";
        }

        // GET /api/values/?name=normalian&num=10
        public string Get(string name, int num)
        {
            Debug.WriteLine("☆☆ name = " + name);
            Debug.WriteLine("☆☆ num = " + num);
            return "その他";
        }
    (中略)

POST における基本的なバインド方式

  • ValuesController.cs の抜粋
    public class ValuesController : ApiController
    {
        // GET /api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

    (中略)

        // POST /api/values
        public string Post(int hentai, string comment)
        {
            Debug.WriteLine("☆☆ hentai = " + hentai);
            Debug.WriteLine("☆☆ comment = " + comment);
            return "きたよー";
        }

    (中略)
  • Index.cshtml
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8" />
    <title>ASP.NET Web API</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.7.2.min.js")" type="text/javascript"></script>
    <meta name="viewport" content="width=device-width" />
</head>
<body>
    <header>
        <div class="content-wrapper">
            <div class="float-left">
                <p class="site-title">
                    <a href="/">ASP.NET Web API のサンプル</a></p>
            </div>
        </div>
    </header>
    <div id="body">
        <form id="myform" action="/">
        <input type="button" id="api_button" value="リクエスト送付" />
        <p>
            <input type="radio" name="hentai" value="0" checked />とても変態
            <input type="radio" name="hentai" value="1" />普通に変態
            <input type="radio" name="hentai" value="2" />ちょっと変態
            <input type="radio" name="hentai" value="3" />割と普通
        </p>
        <p>
            <input type="text" value="文字列" name="comment" />
        </p>
        </form>
    </div>
    <script type="text/javascript">
        $('#api_button').on('click', function () {
            var data = $('#myform').serialize();
            $.ajax({
                type: 'POST',
                url: '@Url.Content("~/api/values")',
                data: data,
                success: function (res) {
                    alert(res);
                }
            });
        });
    </script>
</body>
</html>

上記のコードで確認頂けると思うが、jQuery.serialize() メソッドを利用して hentai, comment パラメータを ValuesController に送付している。送付結果は以下となる。