Das Übergeben mehrerer Parameter an eine GET-Methode in C# ist eine häufige Anforderung bei der Entwicklung von Web-APIs. Dieser Artikel untersucht verschiedene Techniken, um dies in ASP.NET Core zu erreichen, wobei der Schwerpunkt auf Klarheit, Wartbarkeit und Best Practices liegt.
Inhaltsverzeichnis
- Parameterübergabe über konventionelles Routing
- Verwenden von Attribut-Routing und [FromQuery]
- Behandlung optionaler Parameter
- Nutzen von Model Binding
- Robuste Fehlerbehandlung
Parameterübergabe über konventionelles Routing
Konventionelles Routing integriert Parameter direkt in den URL-Pfad. Dieser Ansatz eignet sich für eine kleine Anzahl von Parametern, die eine Ressource direkt identifizieren.
Beispiel: Abrufen eines Produkts basierend auf seiner ID und der Kategorie-ID.
URL: /products/123/category/456
using Microsoft.AspNetCore.Mvc;
public class ProductsController : Controller
{
public IActionResult GetProduct(int productId, int categoryId)
{
// productId und categoryId verarbeiten
return Ok($"Product ID: {productId}, Category ID: {categoryId}");
}
}
Einschränkungen: URLs werden mit zunehmender Anzahl von Parametern weniger lesbar und wartbar. Es ist weniger flexibel für optionale Parameter.
Verwenden von Attribut-Routing und [FromQuery]
Attribut-Routing bietet mehr Kontrolle über die URL-Struktur. Mit [FromQuery]
werden Parameter aus der Query-String extrahiert, wodurch URLs sauberer und übersichtlicher werden, selbst bei vielen Parametern.
Beispiel: Das gleiche Beispiel zum Abrufen von Produkten, aber mit Attribut-Routing und [FromQuery]
.
URL: /products?productId=123&categoryId=456
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet]
public IActionResult GetProduct([FromQuery] int productId, [FromQuery] int categoryId)
{
return Ok($"Product ID: {productId}, Category ID: {categoryId}");
}
}
Diese Methode fördert eine bessere URL-Organisation und Lesbarkeit. Das Attribut [ApiController]
ermöglicht automatische Modellvalidierung und Antwortbehandlung.
Behandlung optionaler Parameter
Optionale Parameter erhöhen die Flexibilität. Verwenden Sie Standardwerte in der Controller-Aktionssignatur.
[HttpGet]
public IActionResult GetProduct([FromQuery] int productId, [FromQuery] int categoryId, [FromQuery] int pageSize = 10)
{
return Ok($"Product ID: {productId}, Category ID: {categoryId}, Page Size: {pageSize}");
}
Hier hat pageSize
den Standardwert 10, wenn er nicht in der Query-String angegeben wird.
Nutzen von Model Binding
Für mehrere Parameter sollten Sie ein dediziertes Modell erstellen. Dies verbessert die Codeorganisation und Wartbarkeit. ASP.NET Core bindet die Query-String automatisch an die Eigenschaften des Modells.
public class ProductFilter
{
public int ProductId { get; set; }
public int CategoryId { get; set; }
public int PageSize { get; set; } = 10;
}
[HttpGet]
public IActionResult GetProduct(ProductFilter filter)
{
return Ok($"Product ID: {filter.ProductId}, Category ID: {filter.CategoryId}, Page Size: {filter.PageSize}");
}
Robuste Fehlerbehandlung
Behandeln Sie immer potenzielle Fehler, wie z. B. fehlende erforderliche Parameter oder ungültige Datentypen. Verwenden Sie Techniken wie Modellvalidierung oder explizite Parameterprüfungen, um diese Situationen problemlos zu behandeln.
[HttpGet]
public IActionResult GetProduct(ProductFilter filter)
{
if (filter.ProductId == 0)
{
return BadRequest("Product ID is required.");
}
// ... restlicher Code ...
}