Suchen Sie nach Best Practices beim Arbeiten mit verschachtelten Routen in .NET Core MVC.NETCORE MVC - So arbeiten Sie mit verschachtelten, multiparametrisierten Routen
die CampusController.cs
arbeitet mit einem Basismodell Lassen Sie sagen:
[Route("api/campus/")]
public class CampusController : Controller
{
...
[HttpGet]
[Route("{campusId}")]
public IActionResult GetCampusInfo ([FromQuery]int campusId) { ... }
}
Und BuildingController.cs
arbeitet mit einem Kind Modell:
[Route("api/campus/{campusId}/building")]
public class BuildingController : Controller
{
...
[HttpGet]
[Route("{buildingId}")]
public IActionResult GetBuilding ([FromQuery]int buildingId) { ... }
[Route("{buildingId}/")]
public IActionResult GetBuilding ([FromQuery]int buildingId) { ... }
....
(more Action Methods)
}
Wenn buildingId
Karten direkt auf die Datenbank es campusId
auch wenn die vorgesehenen abgerufen könnte ist nicht der Elternteil. Um die URL beim Aufrufen von /api/campus/{campusId}/building/{buildingId}
sauber zu halten, möchte ich {campusId}
validieren und ein 4xx-codiertes IActionResult zurückgeben, wenn es ungültig ist. Es muss einen besseren Weg geben, als die Validierungslogik in jede Aktionsmethode in BuildingController
einzuschließen.
- Gibt es eine Möglichkeit, mehrere Aktionsmethoden auf verschiedenen Controllern zu kaskadieren? So dass eine Validierungsmethode auf
CampusController
zuerst aufgerufen würde und wiederum eine Methode aufBuildingController
aufrufen? - Gibt es eine Möglichkeit, eine Verifizierung auf Controller-Ebene von
campusId
zu erhalten, die einen Kurzschluss verursachen und ein ActionResult zurückgeben könnte, wenn die Validierung fehlschlägt?
EDIT: Wenn ich auf Validierungslogik beziehe, meine ich API-Signale; nicht die Geschäftslogik, die tatsächlich feststellt, ob campusId gültig ist/ist.
Vielen Dank im Voraus!
Diese Lösung ist für mich am sinnvollsten, da das gesamte "Campus" -Modell nicht in der "BuildingController" -Klasse sein muss; Es muss nur eine einfache Validierungsprüfung durchgeführt werden. Vielen Dank! –
Warum nicht FromRoute anstelle von FromQuery verwenden? – 000
@Sam 'FromRoute' ist korrekt. Ich hatte gerade die Parameter vom OP kopiert. es war ein Versehen meinerseits. Werde Dich auf dem Laufenden halten. Danke, dass du es aufgezeigt hast. – Nkosi