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.
Erst dann wird das passende Projekt Template Web API ausgewählt.
Was wir dann erhalten ist eigentlich ASP.NET MVC. Es gibt eine Testseite die funktionieren muss.
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.
In der Visual Studio Visual Basic Solution werden wir vier Dateien behandeln, bzw verändern.
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.
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