ASP.NET Web Service API 1x1

Mit .NET 4.5 hält die ASP.NET Web Service API Einzug. Man braucht nicht unbedingt das neue Visual Studio 11 dazu, alternativ gibt es auch ein NuGet Package für 2010.

Die ASP.NET Web API ist Bestandteil von ASP.MVC. Es finden sich einige Konzepte darin wieder wie das Routing, anderes erinnert an .NET RIA Services ( auch ASP.NET Dynamic Data). Zusammengefasst keine Revolution. Aber anders als z.B. Project Volta befinden wir uns in einem Beta Stadium. WCF verliert an Bedeutung. Es wird Zeit für “a new kid in town”.

Zuerst legen wir ein Projekt vom Typ ASP.NET MVC  Application an, auch wenn man nur einen Service schreiben möchte.

image

Erst dann wird das passende Projekt Template Web API ausgewählt.

image

Was wir dann erhalten ist eigentlich ASP.NET MVC. Es gibt eine Testseite die funktionieren muss.

image

Es ist zwar im Projekt Template schon alles vorhanden, aber sie könnten (wir tun das nicht) neue Controller anlegen, die Basis für die API Sicht sind.

image

In der Visual Studio Visual Basic Solution werden wir vier Dateien behandeln, bzw verändern.

image

Zunächst sehr kurz der Part das Datenmodel zu codieren. Also ein Objekt für Kunden und eines für CRUD Operationen. Man könnte das auch mit Entitiy Framework erledigen. Die Datenbank ist die Northwind.sdf für SQLCompact im Verzeichnis app_data. Der Connection String wird in der web.config verwaltet.

     <add name="NorthwindSDF" connectionString="Data Source=|DataDirectory|\northwind.sdf" 
providerName="System.Data.SqlServerCe.4.0"/> </connectionStrings>

Für alle die schon vergessen haben, wie eine SQL Abfrage nativ durchzuführen ist folgender Code. Vergessen Sie nicht eine Referenz im Projekt auf System.Data.SqlServerCe zu setzen und dann noch per Imports in der VB Code Datei.

 Public Function getKunden() As List(Of kunden)
        Dim conn As New SqlCeConnection(
            ConfigurationManager.ConnectionStrings("northwindSDF").ConnectionString)
        Dim sql As String = "SELECT * FROM Customers"
        Dim kundenListe As New List(Of kunden)
        Dim cmd As New SqlCeCommand(sql, conn)
        Dim rd As SqlCeDataReader
        conn.Open()

        rd = cmd.ExecuteReader
        While rd.Read
            kundenListe.Add(
                New kunden With {.Kundennummer = rd("Customer ID"),
                                 .KundenName = rd("Company Name")}
                             )
        End While
        conn.Close()
        Return kundenListe
    End Function

Als nächstes nehmen wir uns den Controller vor. Hier muss gegenüber dem Template der Name auf Customers gändert werden. Dieser kommt dann zum Einsatz bei REST Query.

Public Class CustomersController
    Inherits ApiController

    ' GET /api/values
    Public Function GetValues() As IEnumerable(Of kunden)
        Dim c As New kundenModel
        Return c.getKunden()
    End Function

    ' GET /api/values/5
    Public Function GetValue(ByVal id As String) As kunden
        Throw New HttpResponseException(System.Net.HttpStatusCode.NotFound)
        Return Nothing
    End Function

Die Funktionsnamen GetValues sind reservierte Wörter  (in C# nur Get()). Zu Demo Zwecken eine HTTP typische 404 Antwort wenn der Kunden nicht gefunden wird. Wird er hier natürlich nie.

Der Aufruf im Browser erfolgt per REST URI http://werver/API/Customers  (nicht case sensitiv). Die Rückgabe ist JSON.

image

Der Grund für die URL Aufruf Syntax liegt in der Datei global.asax. Dort die Regel für das Routing als Code vor.

  Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

        routes.MapHttpRoute( _
            name:="DefaultApi", _
            routeTemplate:="api/{controller}/{id}", _
            defaults:=New With {.id = RouteParameter.Optional} _
        )

        routes.MapRoute( _
            name:="Default", _
            url:="{controller}/{action}/{id}", _
            defaults:=New With {.controller = "Home", .action = "Index", 
.id = UrlParameter.Optional} _ ) End Sub

Natürlich gibts zur Web API noch spannende Funktionen wie Paging, oder Formate. Dazu wie immer später mehr

Pingbacks and trackbacks (1)+

Kommentar schreiben