ASP.NET Web API mit winRT METRO App konsumieren

In einem früheren Blog Post habe ich gezeigt, wie man die neue ASP.NET Web API als REST basierte Service Schicht einsetzen kann, Dabei braucht man auch nicht das komplette ASP.NET MVC 4 Projekt. Mein VB.NET Beispiel erweitert eine bestehende ASP.NET Website.

Die Datei Global.asax.vb imWeb Verezeichnis muss die Routing Regel implementieren und braucht zwei Namensräume.

Imports System.Web.Routing
Imports System.Web.Http
Public Class Global_asax
    Inherits System.Web.HttpApplication
    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

        RouteTable.Routes.MapHttpRoute(
            name:="DefaultApi",
            routeTemplate:="api/{controller}/{id}",
            defaults:=New With {.id = RouteParameter.Optional}
        )
    End Sub

Dann wird im Web Projekt eine neue Klasse Web API Controller angelegt. Der Name setzt sich zusammen aus [Daten}Controller, also hier kundencontroller.vb

image

In diesem WInrt Beispiel wird allerdings nur die REST GET Methode implementiert. Die Datei mit der Liste von Vornamen wird im APP_Data Verzeichnis abgelegt. Da der Controller nicht direkt in der ASP.NET Pipline lauft, kann man Server.Mappath nicht verwenden. Mein Workaround ist die Appdomain und das DataDirectory.

Public Class KundenController
    Inherits ApiController
    ' GET /api/<controller>
    Public Function GetValues() As IEnumerable(Of String)
        Return File.ReadAllLines(AppDomain.CurrentDomain.GetData("DataDirectory") + "\vorname.txt")
    End Function

 

Für den Funktionstest einfach im Browser api/kunden aufrufen.

METRO Windows 8 Anwendung

Im VB.NET Client  wird per HTTP Client der Service aufgerufen und als Objekt im Json Format zurück geliefert. Per Parse wird daraus ein Array von JsonObject Elementen. Aus diesem wird per LINQ Abfrage der String extrahiert und eine generische Liste erzeugt. in diesem Fall von Strings.  q kann man dann ganz einfach an eine GridView binden.

 Private Async Function Button_Click_1(sender As Object, e As RoutedEventArgs) As Task
        Dim uri As Uri = New Uri("http://localhost:12933/api/kunden")
        Dim http As New HttpClient()
        Dim j As JsonArray
        j = JsonArray.Parse(Await http.GetStringAsync(uri))
        Dim q = From item In j
                Select item.GetString
        Gridview1.ItemsSource = q
    End Function

Pingbacks and trackbacks (1)+

Kommentar schreiben