Kurse:Model Binding: Unterschied zwischen den Versionen
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…“ |
(kein Unterschied)
|
Aktuelle Version vom 23. Juni 2025, 09:39 Uhr
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]
// liest den Wert nur aus dem Query-String
public IActionResult ActionMethodName( [FromQuery] type parameter)
{
}
[FromRoute]
// liest den Wert nur aus den Routenparametern
public IActionResult ActionMethodName( [FromRoute] type parameter)
{
}
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
class ClassName
{
public type PropertyName { get; set; }
}
form-urlencoded und form-data
form-urlencoded (Standard)
Request-Header
Content-Type: application/x-www-form-urlencoded
Request-Body
param1=value1¶m2=value2
form-data
Request-Header
Content-Type: multipart/form-data
Request-Body
--------------------------d74496d66958873e Content-Disposition: form-data; name="param1" value1 --------------------------d74496d66958873e Content-Disposition: form-data; name="param2" value2
Modellvalidierung
class ClassName
{
[Attribute] // wendet eine Validierungsregel auf diese Eigenschaft an
public type PropertyName { get; set; }
}
ModelState
- IsValid: Gibt an, ob mindestens ein Validierungsfehler vorliegt oder nicht (
trueoderfalse). - 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.:
(999)-999-9999oder9876543210
- [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.:
http://www.example.com
- [ValidateNever]
- Gibt an, dass die Eigenschaft nicht validiert werden soll (schließt die Eigenschaft von der Modellvalidierung aus).
Benutzerdefinierte Validierungen
class ClassName : ValidationAttribute
{
public override ValidationResult? IsValid(object? value, ValidationContext validationContext)
{
// return ValidationResult.Success;
// [oder] return new ValidationResult("Fehlermeldung");
}
}
- ValidationAttribute: Basisklasse für alle Validierungsattribute wie
RequiredAttribute,RegularExpressionAttribute,RangeAttribute,StringLengthAttribute,CompareAttributeusw. Stellt Eigenschaften wieErrorMessage& Methoden wieValidate(),IsValid()etc. bereit.
- ValidationContext: Dient als Parameter für die
IsValid()-Methode von benutzerdefinierten Validierungsattribut-Klassen. Stellt Eigenschaften wieObjectType,ObjectInstancebereit.
Benutzerdefinierte Validierungen mit mehreren Eigenschaften
IValidatableObject
class ClassName : IValidatableObject
{
// Modelleigenschaften hier
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (Bedingung)
{
yield return new ValidationResult("Fehlermeldung");
}
}
}
- IValidatableObject: Basis-Interface für Modellklassen mit Validierung. Stellt eine Methode namens
Validate()zur Verfügung, um Validierungslogik auf Klassenebene zu definieren. DieValidate()-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
Validate()-Methode von Modellklassen, dieIValidatableObjectimplementieren. Stellt Eigenschaften wieObjectType,ObjectInstancebereit.
[Bind] und [BindNever]
[Bind]
class ClassNameController
{
public IActionResult ActionMethodName( [Bind(nameof(ClassName.PropertyName), nameof(ClassName.PropertyName) )] ClassName parameterName)
{
}
}
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]
class ModelClassName
{
[BindNever]
public type PropertyName { get; set; }
}
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]
// 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)
{
}
Input-Formatter
Benutzerdefinierte Model-Binder
Benutzerdefinierter Model-Binder
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);
}
}
- IModelBinder: Basis-Interface für alle benutzerdefinierten Model-Binder. Stellt eine Methode namens
BindModelAsynczur 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
BindModelAsync()-Methode von benutzerdefinierten Model-Binder-Klassen. Stellt Eigenschaften wieHttpContext,ModelState,ValueProvider,Resultetc. bereit.
Benutzerdefinierte Model-Binder-Provider
class ClassName : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext providerContext)
{
// gibt den Typ der aufzurufenden benutzerdefinierten Model-Binder-Klasse zurück
return new BinderTypeModelBinder(typeof(YourModelBinderClassName));
}
}
- IModelBinderProvider: Basis-Interface für alle benutzerdefinierten Model-Binder-Provider. Stellt eine Methode namens
GetBinderzur Verfügung, um den Typ der benutzerdefinierten Model-Binder-Klasse zurückzugeben.
- ModelBinderProviderContext: Dient als Parameter für die
GetBinder()-Methode von benutzerdefinierten Model-Binder-Provider-Klassen. Stellt Eigenschaften wieBindingInfo,Servicesetc. bereit.