Webforms REST API

Wer noch Webforms Projekte zu betreuen hat und trotzdem JSON Daten am Client verarbeiten möchte, kann per Nuget durchaus sein Web Projekt um ASP.NET Web Api Funktion erweitern. Zum einem ist das nicht ganz ohne Risiko, zum anderen muss man auch entsprechende Skills entwickeln.

Dabei kann man JSON Daten auch mit einer klassischen ASPX Seite erzeugen. Json ist ein pseudo Standard Format, welches per JavaScript Code die Daten beschreibt.

{ ‘objekt’ : ‘wert’}

Für eine Datenbank Abfrage benötigt man in der Regel eine Liste, bzw. JavaScript Array, das mit eckigen Klammern eine Reihe von Objekten definiert.

[{ ‘objekt’ : ‘wert’},{ ‘objekt’ : ‘wert’}]

Meine aktuelle Meinung zu REST API’s im generellen ist, das die übermittelten Datenstrukturen flach und spezifisch sein sollen. Also quasi für jede Sicht eine passende API, die nichts dem Datenmodell im Server zu tun hat.

Der geübte Webforms Programmierer kann nun eine ASP.NET Seite erstellen und ein SQLDatasource Control einfügen, um sein spezielles SQL Select Statement abzusenden. Das kann auch durchaus eine komplexere Sicht auf mehrere Tabellen sein.

Als nächstes wird ein Repeater Control verwendet um für jeden Datensatz ein JavaScript Objekt zu erzeugen. Üblicherweise folgen JavaScript Objekte in der Namensgebung der camelCase Notation.

Besonderes Highlight meiner Lösung ist das Komma. Dieses muss im Array die Objekte trennen. Auf den ersten Blick wird man eines nachfolgenden Komma Zeichen verwenden. Damit hat man am Ende ein Komma zu viel vor der eckigen Klammer. Meine Lösung verlagert das Problem an den Anfang der JSON Liste und verzichtet beim ersten Datensatz auf das Zeichen (Zeile 5).

   1:  <%@ Page Language="C#"%>
   2:  <asp:sqldatasource id="SqlDataSource1" runat="server" 
connectionstring="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
selectcommand="SELECT * FROM [Customers]"></asp:sqldatasource>
   3:  [<asp:repeater id="Repeater1" runat="server" datasourceid="SqlDataSource1">
   4:              <ItemTemplate>
   5:                <%#Container.ItemIndex==0?' ':','%>
   6:                  {
   7:                  "customerID": "<%#Eval("CustomerID")%>",
   8:                    "companyName": "<%#Eval("CompanyName")%>"
   9:                  } 
  10:              </ItemTemplate>
  11:      
  12:          </asp:repeater>
  13:  ]

 

Alle ASP.NET spezifischen Elemente wie Form oder auch die HTML Elemente werden in diesem Beispiel einfach entfernt um nur JSON Daten über die Leitung zu liefern. Das Ergebnis im Browser

[ { "customerID": "ALFKI", "companyName": "Alfreds Futterkiste" } , { "customerID": "ANATR", "companyName": "Ana Trujillo Emparedados y helados" } , { "customerID": "ANTON", "companyName": "Antonio Moreno Taquería" } , { "customerID": "AROUT", "companyName": "Around the Horn" } , { "customerID": "BERGS", "companyName":

Achtung wenn sich in den Daten Sonderzeichen befinden, speziell das Hochkomma, muss dieses JSON maskiert werden.

Kommentare sind geschlossen