Kurse:Model Binding und Alfred-Rust-Saal: Unterschied zwischen den Seiten

Aus ahrensburg.city
(Unterschied zwischen Seiten)
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „== Model Binding == '''Model Binding''' ist eine Funktion von ASP.NET Core, die Werte aus HTTP-Anfragen liest und sie als Argumente an die Aktionsmethode übergibt. === QueryString vs. RouteData === ==== [FromQuery] und [FromRoute] ==== '''[FromQuery]''' <syntaxhighlight lang="csharp"> // liest den Wert nur aus dem Query-String public IActionResult ActionMethodName( [FromQuery] type parameter) { } </syntaxhighlight> '''[FromRoute]''' <syntaxhighlight l…“
 
// via Wikitext Extension for VSCode
 
Zeile 1: Zeile 1:
== Model Binding ==
Der Alfred-Rust-Saal befindet sich in der Adresse Wulfsdorfer Weg 71, 22926 Ahrensburg.
'''Model Binding''' ist eine Funktion von ASP.NET Core, die Werte aus HTTP-Anfragen liest und sie als Argumente an die Aktionsmethode übergibt.
Er ist ein zentraler Ort für Theater, Musik, Events und Vorträge. Der Saal hat 462 Plätze. Die Gesamtfläche beträgt 441m².
 
==Weblink==
=== QueryString vs. RouteData ===
* https://www.ahrensburg.de/Bildung-Kultur/Kulturelle-Einrichtungen/Alfred-Rust-Saal/
==== [FromQuery] und [FromRoute] ====
* https://theater-und-musik-in-ahrensburg.de/
 
'''[FromQuery]'''
<syntaxhighlight lang="csharp">
// liest den Wert nur aus dem Query-String
public IActionResult ActionMethodName( [FromQuery] type parameter)
{
}
</syntaxhighlight>
 
'''[FromRoute]'''
<syntaxhighlight lang="csharp">
// liest den Wert nur aus den Routenparametern
public IActionResult ActionMethodName( [FromRoute] type parameter)
{
}
</syntaxhighlight>
 
=== Modelle ===
Ein '''Modell''' ist eine Klasse, die die Struktur von Daten (als Eigenschaften) darstellt, die Sie von der Anfrage empfangen und/oder an die Antwort senden möchten.
Auch bekannt als '''POCO''' (Plain Old CLR Objects).
 
==== Modell ====
<syntaxhighlight lang="csharp">
class ClassName
{
  public type PropertyName { get; set; }
}
</syntaxhighlight>
 
=== form-urlencoded und form-data ===
==== form-urlencoded (Standard) ====
'''Request-Header'''
<pre>
Content-Type: application/x-www-form-urlencoded
</pre>
 
'''Request-Body'''
<pre>
param1=value1&param2=value2
</pre>
 
==== form-data ====
'''Request-Header'''
<pre>
Content-Type: multipart/form-data
</pre>
 
'''Request-Body'''
<pre>
--------------------------d74496d66958873e
Content-Disposition: form-data; name="param1"
value1
--------------------------d74496d66958873e
Content-Disposition: form-data; name="param2"
value2
</pre>
 
=== Modellvalidierung ===
<syntaxhighlight lang="csharp">
class ClassName
{
  [Attribute] // wendet eine Validierungsregel auf diese Eigenschaft an
  public type PropertyName { get; set; }
}
</syntaxhighlight>
 
==== ModelState ====
* '''IsValid''': Gibt an, ob mindestens ein Validierungsfehler vorliegt oder nicht (<code>true</code> oder <code>false</code>).
* '''Values''': Enthält den Wert jeder Modelleigenschaft mit der entsprechenden "Errors"-Eigenschaft, die eine Liste der Validierungsfehler dieser Modelleigenschaft enthält.
* '''ErrorCount''': Gibt die Anzahl der Fehler zurück.
 
==== Validierungsattribute ====
; [Required(ErrorMessage = "Wert")]
: Gibt an, dass der Eigenschaftswert erforderlich ist (darf nicht leer oder null sein).
 
; [StringLength(int maximumLength, MinimumLength = Wert, ErrorMessage = "Wert")]
: Gibt die minimale und maximale Länge (Anzahl der Zeichen) an, die in der Zeichenfolge zulässig ist.
 
; [Range(int minimum, int maximum, ErrorMessage = "Wert")]
: Gibt den minimal und maximal zulässigen numerischen Wert an.
 
; [RegularExpression(string pattern, ErrorMessage = "Wert")]
: Gibt das gültige Muster (regulärer Ausdruck) an.
 
; [EmailAddress(ErrorMessage = "Wert")]
: Gibt an, dass der Wert eine gültige E-Mail-Adresse sein muss.
 
; [Phone(ErrorMessage = "Wert")]
: Gibt an, dass der Wert eine gültige Telefonnummer sein muss. Bsp.: <code>(999)-999-9999</code> oder <code>9876543210</code>
 
; [Compare(string otherProperty, ErrorMessage = "Wert")]
: Gibt an, dass die Werte der aktuellen Eigenschaft und einer anderen Eigenschaft übereinstimmen müssen.
 
; [Url(ErrorMessage = "Wert")]
: Gibt an, dass der Wert eine gültige URL (Website-Adresse) sein muss. Bsp.: <code>http://www.example.com</code>
 
; [ValidateNever]
: Gibt an, dass die Eigenschaft nicht validiert werden soll (schließt die Eigenschaft von der Modellvalidierung aus).
 
=== Benutzerdefinierte Validierungen ===
<syntaxhighlight lang="csharp">
class ClassName : ValidationAttribute
{
  public override ValidationResult? IsValid(object? value, ValidationContext validationContext)
  {
    // return ValidationResult.Success;
    // [oder] return new ValidationResult("Fehlermeldung");
  }
}
</syntaxhighlight>
 
* '''ValidationAttribute''': Basisklasse für alle Validierungsattribute wie <code>RequiredAttribute</code>, <code>RegularExpressionAttribute</code>, <code>RangeAttribute</code>, <code>StringLengthAttribute</code>, <code>CompareAttribute</code> usw. Stellt Eigenschaften wie <code>ErrorMessage</code> & Methoden wie <code>Validate()</code>, <code>IsValid()</code> etc. bereit.
 
* '''ValidationContext''': Dient als Parameter für die <code>IsValid()</code>-Methode von benutzerdefinierten Validierungsattribut-Klassen. Stellt Eigenschaften wie <code>ObjectType</code>, <code>ObjectInstance</code> bereit.
 
==== Benutzerdefinierte Validierungen mit mehreren Eigenschaften ====
==== IValidatableObject ====
<syntaxhighlight lang="csharp">
class ClassName : IValidatableObject
{
  // Modelleigenschaften hier
  public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
  {
    if (Bedingung)
    {
      yield return new ValidationResult("Fehlermeldung");
    }
  }
}
</syntaxhighlight>
 
* '''IValidatableObject''': Basis-Interface für Modellklassen mit Validierung. Stellt eine Methode namens <code>Validate()</code> zur Verfügung, um Validierungslogik auf Klassenebene zu definieren. Die <code>Validate()</code>-Methode wird ausgeführt, nachdem alle Validierungen auf Eigenschaftsebene ausgeführt wurden; sie wird jedoch nicht ausgeführt, wenn mindestens eine Validierung auf Eigenschaftsebene einen Fehler ergibt.
 
* '''ValidationContext''': Dient als Parameter für die <code>Validate()</code>-Methode von Modellklassen, die <code>IValidatableObject</code> implementieren. Stellt Eigenschaften wie <code>ObjectType</code>, <code>ObjectInstance</code> bereit.
 
=== [Bind] und [BindNever] ===
==== [Bind] ====
<syntaxhighlight lang="csharp">
class ClassNameController
{
  public IActionResult ActionMethodName( [Bind(nameof(ClassName.PropertyName), nameof(ClassName.PropertyName) )]  ClassName parameterName)
  {
  }
}
</syntaxhighlight>
Das '''[Bind]'''-Attribut gibt an, dass nur die angegebenen Eigenschaften in die Modellbindung einbezogen werden sollen. Verhindert Over-Posting (das Senden von Werten an unerwartete Eigenschaften), insbesondere in "Create"-Szenarien.
 
==== [BindNever] ====
<syntaxhighlight lang="csharp">
class ModelClassName
{
  [BindNever]
  public type PropertyName { get; set; }
}
</syntaxhighlight>
Das '''[BindNever]'''-Attribut gibt an, dass die angegebene Eigenschaft NICHT in die Modellbindung einbezogen werden soll. Nützlich, wenn Sie weniger Eigenschaften von der Modellbindung ausschließen müssen.
 
=== [FromBody] ===
<syntaxhighlight lang="csharp">
// ermöglicht es den Input-Formattern, Daten nur aus dem Request-Body (als JSON, XML oder benutzerdefiniert) zu lesen
public IActionResult ActionMethodName( [FromBody] type parameter)
{
}
</syntaxhighlight>
 
=== Input-Formatter ===
 
=== Benutzerdefinierte Model-Binder ===
==== Benutzerdefinierter Model-Binder ====
<syntaxhighlight lang="csharp">
class ClassName : IModelBinder
{
  public Task BindModelAsync(ModelBindingContext bindingContext)
  {
    // liest den Wert aus der Anfrage
    bindingContext.ValueProvider.GetValue("FirstName");
    // gibt das Modellobjekt zurück, nachdem die Daten aus der Anfrage gelesen wurden
    bindingContext.Result = ModelBindingResult.Success(your_object);
  }
}
</syntaxhighlight>
 
* '''IModelBinder''': Basis-Interface für alle benutzerdefinierten Model-Binder. Stellt eine Methode namens <code>BindModelAsync</code> zur Verfügung, um die Logik für das Binden (Lesen) von Daten aus der Anfrage und das Erstellen eines Modellobjekts zu definieren, das als Parameter in der Aktionsmethode empfangen wird.
 
* '''ModelBindingContext''': Dient als Parameter für die <code>BindModelAsync()</code>-Methode von benutzerdefinierten Model-Binder-Klassen. Stellt Eigenschaften wie <code>HttpContext</code>, <code>ModelState</code>, <code>ValueProvider</code>, <code>Result</code> etc. bereit.
 
==== Benutzerdefinierte Model-Binder-Provider ====
<syntaxhighlight lang="csharp">
class ClassName : IModelBinderProvider
{
  public IModelBinder GetBinder(ModelBinderProviderContext providerContext)
  {
    // gibt den Typ der aufzurufenden benutzerdefinierten Model-Binder-Klasse zurück
    return new BinderTypeModelBinder(typeof(YourModelBinderClassName));
  }
}
</syntaxhighlight>
 
* '''IModelBinderProvider''': Basis-Interface für alle benutzerdefinierten Model-Binder-Provider. Stellt eine Methode namens <code>GetBinder</code> zur Verfügung, um den Typ der benutzerdefinierten Model-Binder-Klasse zurückzugeben.
 
* '''ModelBinderProviderContext''': Dient als Parameter für die <code>GetBinder()</code>-Methode von benutzerdefinierten Model-Binder-Provider-Klassen. Stellt Eigenschaften wie <code>BindingInfo</code>, <code>Services</code> etc. bereit.

Aktuelle Version vom 23. Juni 2025, 22:15 Uhr

Der Alfred-Rust-Saal befindet sich in der Adresse Wulfsdorfer Weg 71, 22926 Ahrensburg. Er ist ein zentraler Ort für Theater, Musik, Events und Vorträge. Der Saal hat 462 Plätze. Die Gesamtfläche beträgt 441m².