ASP.NET Web-API-Routing ist einfach ausgedrückt der Prozess, bei dem Client-Anfragen den entsprechenden Aktionen zugeordnet werden. Im Artikel "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings" habe ich das Setzen von Routen über Vorlagen, Konventionen und HTTP-Methoden erlebt, und der Vorteil dieses Ansatzes ist, dass die Routing-Vorlagen einheitlich in der WebApiConfig-Klasse unter dem App_Start-Ordner platziert werden, was für die Verwaltung praktisch ist, aber der Nachteil ist, dass es nicht flexibel genug ist.
REST behandelt alles als Ressource, und manchmal möchte eine Ressource mit Kindressourcen, wie Customer und Orders, eine Anfrage wie customers/1/orders eingeben, aber es ist schwierig, diesen Weg allein konventionell zu erreichen. Tatsächlich bietet uns ASP.NET Web-API eine Route-Funktion, die direkt mit Action verbunden werden kann und sehr flexibel und intuitiv zu bedienen ist.
Lasst uns erleben, wie man die Route-Funktion in ASP.NET MVC4 benutzt.
Erlaube das Route-Attribut
Zuerst musst du es in WebApiConfig einrichten.
Die oben genannte MapHttpAttributeRoutes-Methode ist nur in neueren Versionen ASP.NET Web-API verfügbarWenn deine Version relativ niedrig ist, kannst du die alte Version deinstallieren und die neueste Version über die NuGet Package Manager-Konsole installieren.
Als Nächstes müssen Sie in Global.aSax die ursprüngliche Art der Registrierung von WebApiConfig kommentieren und eine neue Methode übernehmen, wie folgt:
Zu diesem Zeitpunkt kann das Ausführen des Projekts folgenden Fehler melden:
Das liegt daran, dass ich beim Herunterladen der neuesten Version ASP.NET Web-API auch die neueste Version von icrosoft heruntergeladen habe. AspNet.WebApi.HelpPage。 Du kannst die neueste Version von HelpPage deinstallieren und die ältere Version herunterladen.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Verwenden Sie die Route-Eigenschaft
Erstelle eine Cusomter-Klasse.
Erstelle eine Order-Klasse.
Erstelle eine Datenbankklasse, um die Order-Sammlung zu erhalten.
Erstellen Sie einen leeren API-Controller, geschrieben wie folgt:
Geben Sie Folgendes in Ihrem Browser ein:
Wenn Sie ASP.NET MVC4 für die Entwicklung verwenden, können Sie beim ersten Ausführen des Programms folgenden Fehler erhalten:
[A] System.Web.WebPages.Razor.Configuration.HostSection kann nicht in [B]System.Web.WebPages.Razor.Configuration.HostSection gecastet werden. Typ A leitet sich ab "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (in "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ im Kontext "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Typ B leitet sich ab "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (im Kontext "Default" in "C:/Windows/Microsoft.NET/Framework/v4.0.30319") Temporäre ASP.NET Dateien/vs/feb7ce97/a525d58a/asse
Dies liegt daran, dass die neueste Version von Razor beim Herunterladen der neuesten Version der ASP.NET Web API verwendet wird. Sie müssen folgende Konfiguration im Root-Verzeichnis von Web.config konfigurieren:
Verwenden Sie die RoutePrefix-Funktion
Wenn du alle Aktionen in einem API-Controller prefixen möchtest, kannst du die RoutePrefix-Funktion auf den API-Controller setzen.
Zum Beispiel möchten wir, dass es in einem Format wie diesem ist: http://localhost/api/customers/1/orders
Ändere den OrdersController auf diese Weise.
Du kannst auch ~ in der Route-Funktion verwenden, um die Präfixregeln der Aktion zu überschreiben.
Das von der RoutePrefix-Funktion definierte Präfix kann ebenfalls Parametervariablen enthalten:
Routing-Einschränkungen
Man kann Parametervariablen in einer Route durch "{Name der Parametervariable: Constraint}" einschränken.
Oben, wenn die Fragmentvariablen-id vom Typ int ist, wird sie zur ersten Aktion weitergeleitet, und wenn nicht, wird sie zur zweiten Aktion weitergeleitet.
ASP.NET integrierten Web-API-Einschränkungen umfassen:
{x:alpha} beschränkt Groß- und Kleinbuchstaben {x:bool} {x:datetime} {x:dezimal} {x:double} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} beschränkt den Längenbereich {x:lang} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Man kann mehrere Nebenbedingungen gleichzeitig für eine Parametervariable festlegen:
Implementiere die IHttpRouteConstraint-Schnittstelle, um die Constraint-Regeln anzupassen. Implementiere eine Constraint, die nicht 0 sein darf.
Registrieren Sie eine benutzerdefinierte Constraint in WebApiConfig im App_Start-Ordner.
Verwenden Sie benutzerdefinierte Einschränkungen.
Optionale Parameter und ihre Standardwerte
Wenn eine Routing-Parametervariable optional ist, muss dem Parameter auch ein Standardwert zugewiesen werden.
Füge nach der Einschränkung ? hinzu, um optional anzuzeigen, und setze den Standardwert für id in den Methodenparametern.
Legen Sie einen Namen für die Route fest
Routing-Priorität
Die von der Routeneigenschaft festgelegte Routenpriorität wird anhand von Konventionen und der RouteOrder-Eigenschaft bestimmt.
Die Konventionen sind:
1. Statische Fragmentvariablen 2. Fragmentvariablen mit Nebenbedingungen 3. Fragmentvariablen ohne Einschränkungen 4. Wildcard-Fragmentvariable mit Nebenbedingungen 5. Unbeschränkte Wildcard-Fragmentvariablen
Der Standardwert der RouteOrder-Eigenschaft ist 0, und je kleiner der Eigenschaftswert, desto höher ist er.
Oben ist die Prioritätsreihenfolge für Routing:
Ordnungen/Details statische Fragmentvariable, der Wert der RouteOrder-Eigenschaft ist 0 orders/{id} mit eingeschränkten Fragmentvariablen mit dem Wert 0 in der Eigenschaft RouteOrder orders/{customerName} ist eine Fragmentvariable ohne Einschränkungen, und der Wert der RouteOrder-Eigenschaft ist 0 orders/{*date} ist eine Wildcard-Fragmentvariable mit dem Wert 0 in der Eigenschaft RouteOrder Bestellungen/ausstehende RouteOrder-Eigentumswert von 1
|