Zum Fußzeileninhalt springen
.NET HILFE

OData C# (Wie es für Entwickler funktioniert)

Das Open Data Protocol (OData) vereinfacht das Erstellen und Verwenden von RESTful APIs in der Microsoft .NET-Entwicklung. Es bietet einen standardisierten Ansatz zum Abfragen und Verarbeiten von Daten durch vertraute CRUD-Operationen (Create, Read, Update, Delete). Dieser Artikel untersucht, wie das Open Data Protocol die API-Entwicklung in .NET optimiert und Beispiele präsentiert sowie seine wichtigsten Vorteile hervorhebt. Um mehr über OData zu erfahren, können Sie das OData C# GitHub Repository für den Quellcode überprüfen.

OData C# (How It Works For Developers): Abbildung 1 - OData C#- Datenzugangsprotokoll

OData folgt standardisierten Praktiken zum Erstellen von RESTful Web-APIs und verwendet URLs und HTTP-Verben wie GET und POST, um Operationen zu definieren. Es stellt Daten mithilfe eines Entity Data Model (EDM) und JSON oder AtomPub zur Nachrichtenkodierung dar. Obwohl OData die API-Entwicklung im Vergleich zu GraphQL vereinfacht, bietet es möglicherweise weniger erweiterte Funktionen.

OData C# (How It Works For Developers): Abbildung 2 - OData

Vorteile der Verwendung von OData in .NET

  • Standardisierung: OData erzwingt eine konsistente Methode zur Definition von Entitätsdatenmodellen, Bearbeitung von Anfragen und Formatierung von Antworten. Dies reduziert die Komplexität der Entwicklung und vereinfacht die Integration von Clientanwendungen.
  • Reiche Abfragefunktionen: OData unterstützt eine einheitliche Methode zur Datenabfrage zur Ausführung von CRUD-Operationen, Filterung ($filter), Sortierung (Aufsteigende/Reihenfolgeabsteigende)($orderby) und Paging ($top, $skip) Funktionalitäten, die es Clients ermöglichen, spezifische Datensätze effizient abzurufen.
  • Verbesserte Entwicklererfahrung: Die .NET-Bibliotheken für OData rationalisieren die API-Entwicklung. Entwickler können vorgefertigte Komponenten für Routing, Abfrageverarbeitung und Datenserialisierung nutzen, wodurch Code-Duplikation und Entwicklungszeit reduziert werden.
  • Interoperabilität: OData-kompatible Clients von verschiedenen Plattformen können nahtlos mit Ihrem OData-Dienst auf .NET-Basis interagieren und somit eine breitere Anwendungsintegration fördern.

Einstieg in OData in dem .NET Framework

Die .NET-Bibliotheken für OData verbessern die Entwicklererfahrung, indem sie effiziente Möglichkeiten zur Verwaltung von Datensätzen bieten. Es vereinfacht das Erstellen und Verwenden von RESTful APIs in der .NET-Entwicklung. Es bietet einen standardisierten Ansatz zur Abfrage und Verarbeitung von Daten durch vertraute CRUD-Operationen (Create, Read, Update, Delete).

Einrichten von OData in .NET-Projekten

Beginnen Sie, indem Sie Ihr neues Projekt in Visual Studio öffnen. Navigieren Sie dann zum Lösungs-Explorer, klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie "NuGet-Pakete verwalten". Suchen Sie nach Microsoft.AspNetCore.OData und installieren Sie es. Die aktuelle OData-Version ist 8.2.5.

Um OData in der NuGet-Paket-Manager-Konsole zu installieren, verwenden Sie den folgenden Befehl.

Install-Package Microsoft.AspNetCore.OData

OData C# (How It Works For Developers): Abbildung 3 - OData installieren

Beispiel: Erstellen eines OData-Dienstes in ASP.NET Core

Lass uns eine einfache OData-Modellklasse in einer ASP.NET Core-Anwendung erstellen. Im folgenden Code wird die unten stehende Klasse eine Liste von Diensten offenlegen, die mit der OData-Syntax abgefragt werden können.

public class Service
{
    public int Id { get; set; } 
    public string FirstName { get; set; }
    public decimal Price { get; set; }
}
public class Service
{
    public int Id { get; set; } 
    public string FirstName { get; set; }
    public decimal Price { get; set; }
}
$vbLabelText   $csharpLabel

Beschreibung des Codes

Die Service Klasse stellt eine grundlegende Datenstruktur in C# zur Verwaltung eines Dienstes dar. Sie enthält drei Eigenschaften: Id : Eine ganzzahlige Kennung des Dienstes. FirstName : Ein String, der den Vornamen des Dienstes repräsentiert. Price: Ein Dezimalwert, der den Preis des Dienstes angibt. Diese Klasse kann als Baustein für die Entwicklung komplexerer dienstbezogener Funktionen in .NET-Anwendungen verwendet werden. Wir können je nach Szenario auch Sammlungen oder Navigations-Eigenschaften verwenden.

Hier erfahren Sie, wie Sie in einer ASP.NET Core-Anwendung in Visual Studio einen OData-Controller einrichten, um eine Liste von Diensten über einen standardisierten OData-Endpunkt freizugeben. Das folgende Beispiel zeigt eine grundlegende Implementierung mit einer statischen Liste von Diensten und aktiviert OData-Abfragefunktionen in der Web-API:

using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;

namespace DemoOData.Controllers
{
    [Route("odata/[controller]")]
    public class ServiceController : ODataController
    {
        private static readonly List<Service> Products = new List<Service>
        {
            new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
            new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
        };

        [HttpGet]
        [EnableQuery]
        public IActionResult Get() => Ok(Products);
    }
}
using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;

namespace DemoOData.Controllers
{
    [Route("odata/[controller]")]
    public class ServiceController : ODataController
    {
        private static readonly List<Service> Products = new List<Service>
        {
            new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
            new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
        };

        [HttpGet]
        [EnableQuery]
        public IActionResult Get() => Ok(Products);
    }
}
$vbLabelText   $csharpLabel

Beschreibung des Codes

Der bereitgestellte Code definiert einen ODataController namens ServiceController in einer ASP.NET Core-Anwendung, der das Abfragen und Verarbeiten von Daten mit dem OData-Protokoll ermöglicht. Er leitet Anfragen an odata/Service und stellt eine statische Liste von Service-Objekten bereit, darunter ein Laptop und ein Smartphone. Die Get-Methode, die mit [EnableQuery] versehen ist, ermöglicht es Clients, OData-Abfragen (Filtern, Sortieren, Pagieren) auf der Produktliste auszuführen und die Ergebnisse als IActionResult für HTTP GET-Anfragen zurückzugeben.

Registrieren von OData-Diensten in der Program.cs

Um OData in eine .NET 6-Anwendung zu integrieren, müssen wir die erforderlichen OData-Pakete installieren und konfigurieren. Dies beinhaltet die Definition des OData-Modells, das Einrichten der OData-Middleware und die Konfiguration von Diensten zur Unterstützung von OData-Funktionen wie Filtern, Sortieren und Erweitern.

using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

static IEdmModel GetEdmModel()
{
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
    builder.EntitySet<Service>("Services");
    return builder.GetEdmModel();
}

builder.Services.AddControllers()
    .AddOData(options => options
        .AddRouteComponents("odata", GetEdmModel())
        .Select()
        .Filter()
        .OrderBy()
        .SetMaxTop(20)
        .Count()
        .Expand()
    );
using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

static IEdmModel GetEdmModel()
{
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
    builder.EntitySet<Service>("Services");
    return builder.GetEdmModel();
}

builder.Services.AddControllers()
    .AddOData(options => options
        .AddRouteComponents("odata", GetEdmModel())
        .Select()
        .Filter()
        .OrderBy()
        .SetMaxTop(20)
        .Count()
        .Expand()
    );
$vbLabelText   $csharpLabel

Beschreibung des Codes

Dieser Code konfiguriert die OData-Unterstützung in einer .NET 6-Anwendung. Zunächst importiert er die erforderlichen Namensräume und erstellt eine WebApplicationBuilder-Instanz. Die GetEdmModel-Methode definiert das OData-Modell mithilfe des ODataConventionModelBuilder, der ein Entitätenset für Service-Entitäten spezifiziert. Die AddOData-Methode wird dann aufgerufen, um OData-Dienste zu konfigurieren, einschließlich der Aktivierung von Select, Filter, Order by, Count, Expand, und setzt einen maximalen Top-Wert von 20 für Abfrageergebnisse. Diese Einrichtung stellt sicher, dass die Anwendung OData-Abfragen effektiv handhaben kann.

Die AddOData()-Methode verwendet die GetEdmModel()-Methode, die das Datenmodell für die Abfrage abruft, das die Grundlage eines OData-Dienstes bildet. Dieser Dienst nutzt ein abstraktes Datenmodell, das als Entity Data Model (EDM) bekannt ist, um die exponierten Daten zu definieren. Die Klasse ODataConventionModelBuilder generiert ein EDM durch Standardbenennungen, was die Codeanforderungen minimiert. Alternativ können Entwickler die Klasse ODataModelBuilder verwenden, um mehr Kontrolle über das EDM zu haben.

Screenshot des Codes

OData C# (How It Works For Developers): Abbildung 4 - Code in Visual Studio

Ausführung des Dienstes

Nach Ausführung des Dienstes können Sie den Dienst mit verschiedenen OData-Abfrageoptionen abfragen, wie:

https://localhost:7131/odata/Service

Ausgang des Programms

OData C# (How It Works For Developers): Abbildung 5 - Ausgabe des OData-Dienstes

Einführung in IronPDF

IronPDF ist eine umfassende C#-Bibliothek, die entwickelt wurde, um die Konvertierung von Dateien in PDF, Teilung von PDF-Seiten und Entfernung von Seiten aus PDF in .NET-Anwendungen zu vereinfachen. Es bietet eine breite Palette von Funktionen, einschließlich der Möglichkeit, PDFs aus HTML, CSS, Bildern und JavaScript zu erstellen, was es Entwicklern ermöglicht, Webinhalte mühelos in hochwertige PDF-Dokumente umzuwandeln. Mit seiner intuitiven API und der leistungsstarken Rendering-Engine ermöglicht IronPDF Entwicklern, die PDF-Erzeugungsprozesse zu optimieren, so dass die Integration dynamischer Dokumenterstellungsmöglichkeiten mühelos in ihre Anwendungen erfolgen kann.

OData C# (How It Works For Developers): Abbildung 6 - IronPDF

IronPDF zu einem Projekt hinzufügen

Um IronPDF in Visual Studio zu installieren, navigieren Sie zur NuGet-Paket-Manager-Konsole und verwenden Sie den folgenden Befehl.

Install-Package IronPdf

PDF-Erzeugung

Um ein PDF-Dokument aus HTML-Inhalt in einer .NET-Anwendung zu generieren, können wir die ChromePdfRenderer-Klasse aus einer Bibliothek wie DinkToPdf oder ähnlichen verwenden. Dieses Beispiel zeigt, wie man ein PDF mit Details eines Mitarbeiterdatensatzes erstellt.

public record Employee (string FirstName, string LastName);

class Program
{
    static void Main(string[] args)
    {
        var employee = new Employee("Iron", "Developer");
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
        pdf.SaveAs("PersonRecord.pdf");
    }
}
public record Employee (string FirstName, string LastName);

class Program
{
    static void Main(string[] args)
    {
        var employee = new Employee("Iron", "Developer");
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
        pdf.SaveAs("PersonRecord.pdf");
    }
}
$vbLabelText   $csharpLabel

Dieses Beispiel erstellt einen einfachen Mitarbeiter-Datensatz und verwendet dann IronPDF, um ein PDF-Dokument zu erstellen, das den Namen der Person anzeigt. Es zeigt, wie nahtlos C#-Records in die PDF-Erstellung in .NET-Anwendungen integriert werden können.

OData C# (How It Works For Developers): Abbildung 7 - PDF-Ausgabe

Abschluss

OData vereinfacht die Entwicklung und den Konsum von RESTful APIs in .NET, indem es standardisierte Abfrage- und Bearbeitungsmöglichkeiten bereitstellt. Wir können es auch mit dem Entity Framework integrieren, wodurch die Entwicklungseffizienz erhöht wird, da der Datenzugriff und die Verwaltung vereinfacht werden. OData rationalisiert die API-Entwicklung und ermöglicht nahtlose Integration und Interoperabilität über verschiedene Plattformen hinweg mit seinen umfangreichen Abfragefunktionen und der verbesserten Entwicklererfahrung. Darüber hinaus bietet IronPDF umfassende Funktionen und Unterstützung für eine robuste PDF-Verarbeitung in .NET-Anwendungen.

Häufig gestellte Fragen

Wie vereinfacht OData die API-Entwicklung in .NET?

OData vereinfacht die API-Entwicklung in .NET, indem es ein standardisiertes Protokoll für Abfragen und Datenmanipulationen mit CRUD-Operationen bietet. Es folgt RESTful-Praktiken mit URLs und HTTP-Verben und nutzt ein Entity Data Model (EDM), um Daten im JSON- oder AtomPub-Format darzustellen.

Was sind die Hauptvorteile der Verwendung von OData in .NET-Anwendungen?

Die Hauptvorteile der Verwendung von OData in .NET-Anwendungen umfassen Standardisierung, umfangreiche Abfragefunktionen, verbesserte Entwicklererfahrung und Interoperabilität über verschiedene Plattformen hinweg, was die Komplexität verringert und eine effiziente Datenabfrage ermöglicht.

Wie kann ich einen OData-Dienst in einer ASP.NET Core-Anwendung einrichten?

Um einen OData-Dienst in einer ASP.NET Core-Anwendung einzurichten, müssen Sie ein OData-Modell definieren und die Middleware konfigurieren. Sie können dies tun, indem Sie das Microsoft.AspNetCore.OData NuGet-Paket installieren und den ODataConventionModelBuilder verwenden, um Ihr Entitätsdatenmodell zu definieren.

Welche Rolle spielt das EnableQuery-Attribut in OData?

Das EnableQuery-Attribut in OData ermöglicht es Clients, Vorgänge wie Filtern, Sortieren und Paging auf die von einem OData-Controller bereitgestellten Daten durchzuführen, was die Flexibilität und Nutzbarkeit der API verbessert.

Wie kann ich in .NET ein PDF aus HTML-Inhalten erstellen?

Sie können in .NET ein PDF aus HTML-Inhalten mithilfe der IronPDF-Bibliothek erstellen. Indem Sie einen HTML-String erzeugen und die ChromePdfRenderer-Klasse verwenden, können Sie das HTML als PDF-Dokument rendern, das dann in einer Datei gespeichert werden kann.

Was ist der Zweck des ODataConventionModelBuilder in .NET?

Der ODataConventionModelBuilder in .NET wird verwendet, um ein Entitätsdatenmodell (EDM) mithilfe von Standardbenennungen automatisch zu erzeugen, wodurch der Schreibaufwand für die Definition des OData-Modells in Anwendungen reduziert wird.

Was ist eine umfassende Bibliothek zur PDF-Manipulation in .NET?

IronPDF ist eine umfassende Bibliothek in C# zur PDF-Manipulation, die Aufgaben wie das Konvertieren von Dateien in PDFs, das Aufteilen und Entfernen von PDF-Seiten und das Erzeugen von PDFs aus HTML innerhalb von .NET-Anwendungen erleichtert.

Wie verbessert OData die Interoperabilität in .NET-Diensten?

OData verbessert die Interoperabilität, indem es Clients, die dem OData-Standard folgen, ermöglicht, nahtlos mit .NET-basierten OData-Diensten zu interagieren, was eine breitere Integration über verschiedene Anwendungen und Plattformen hinweg fördert.

Was sind CRUD-Operationen im Kontext von OData?

CRUD-Operationen im Kontext von OData beziehen sich auf die grundlegenden Operationen zum Erstellen, Lesen, Aktualisieren und Löschen, die für die Datenmanipulation innerhalb von RESTful-APIs unerlässlich sind.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen