2012年8月24日金曜日

Android ASP.NET(MVC2)で作成したWebAPIに接続する その1

まずはWebAPIを作成します。

Web APIとは
Web APIは、HTTP(HyperText Transfer Protocol)をベースにデータをやり取りするのが特徴です。
HTTPベースであるため、情報を提供するサーバーとのやり取りは、一般的なWebサイトへのアクセスと同等に行えます。
HTTPを使った一般的なWeb APIでは、単純なリクエスト/レスポンスによるデータ交換が中心となります。

VisualStudioでWeb APIを作成するには
「ASP.NET MVC Webアプリケーション」を 作成します。
ASP.NETMVCはVisualStudio2010では標準で対応していますが、VisualStudio2008では追加パッケージを導入しないと使用することができません。
現在ASP.NET MVCのバージョンは4までありますが、MVC2はASP.NET3.5、MVC3以降はASP.NET4.0が必要です。
VisualStudio2008ではMVC2まで導入可能です。
今回はVisualStudio2008 ASP.NET MVC2でWebAPIを作成します。

ASP.NET MVC2でWebAPIを作成する


以下のサイトよりASP.NET MVC2をダウンロードします。
インストールにはVisualStudio2008にServicePack1をインストールしておく必要があります。
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=22079

インストールが終了したら、Webアプリケーションを作成します。
VisualStudio2008を起動し、「ASP.NET MVC2 Empty Web Application」を選択します。

とりあえず、確認用のページを作成します。
「Controlers」フォルダを右クリックし「Controler」を選択、「HomeControler」を追加します。


「Views」フォルダを右クリックで「新しいフォルダ」を選択し、「Home」フォルダを作成します。
「Home」フォルダを右クリックし「View」を選択し、「Index」ページを追加します。


Indexページを実行したとき、真っ白だとわかりにくいので、Body要素に以下を記載しときます。
<div>
<p>MvcApplication1 For Android Test</p>
<div&gt


実行してみます。



今回は以下のようなxmlを受信し、すべてのnameタグの要素をカンマ区切りで繋げた文字列をxmlで返すWebAPIを作ります。
<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <user>
        <id>1</id>
        <name>田中</name>
    </user>
    <user>
        <id>2</id>
        <name>山田</name>
    </user>
    <user>
        <id>3</id>
        <name>野原</name>
    </user>
</root>

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <user>田中,山田,野原</user>
</root>


「Controlers」フォルダを右クリックで「Controler」を選択し、「TestControler」を追加
TestControler.vbのIndexメソッドにコードを書いていきます。
Imports System.Xml


Namespace MvcApplication1
    Public Class TestController
        Inherits System.Web.Mvc.Controller
        '
        ' GET: /Test
        <HttpPost()> _
        &lt:ValidateInput(False)> _
        Public Function Index(ByVal collection As FormCollection) As ActionResult
            'パラメータとして渡されたXML文字列を取得
            Dim xmlStr As String = collection.Item("testxml")
            '文字列よりXMLを作成
            Dim reqXmlDoc As New XmlDataDocument
            reqXmlDoc.LoadXml(xmlStr)
            'XMLより「name」ノードの値を取得
            Dim nodeList As XmlNodeList = reqXmlDoc.GetElementsByTagName("name")
            Dim namelist As New List(Of String)
            For Each node As XmlNode In nodeList
                namelist.Add(node.InnerText)
            Next

            '処理結果をXMLとして返す
            Dim resXmlDoc As New XmlDocument
            Dim declaration As XmlDeclaration = resXmlDoc.CreateXmlDeclaration("1.0", "UTF-8", Nothing)
            resXmlDoc.AppendChild(declaration)
            Dim root As XmlElement = resXmlDoc.CreateElement("root")
            resXmlDoc.AppendChild(root)
            Dim element As XmlElement = resXmlDoc.CreateElement("user")
            element.InnerText = String.Join(",", namelist.ToArray)
            root.AppendChild(element)
            Return Content(resXmlDoc.OuterXml, "application/xml")
        End Function

    End Class

End Namespace

WebアプリケーションにデータをPostするhtmlを作成します。
TestMvcApplication1.html
ファイルはutf-8で作成しないと日本語が文字化けします。
formのactionに指定するurlは、適宜変更してください。
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<h2>MvcApplication1テスト</h2> 
<form action="http://localhost:53069/Test" method="post"> 
<textarea name="testxml" style="width:600px; height:130px;"> 
<?xml version='1.0' encoding="UTF-8" ?> 
<root> 
    <user> 
        <id>1</id> 
        <name>田中</name> 
    </user> 
    <user> 
        <id>2</id> 
        <name>山田</name> 
    </user> 
    <user> 
        <id>3</id> 
        <name>野原</name> 
    </user> 
</root> 
</textarea><br /> 
 <input type=submit /> 
 </form> 
</body> 
</html> 

Webアプリケーションを実行した状態で上のhtmlをブラウザから開き、クエリ送信ボタンをクリックします。


実行結果




0 件のコメント: