Wie funktioniert ASP.NET Web.api-Griff zwei Methoden mit Namen beginnend mit BEKOMMEN?
Ich freue mich auf das folgende tutorial von Microsoft. Laut diesem tutorial,
Im ersten Beispiel, "Produkte" entspricht dem controller benannt
ProductsController. Die Anforderung eine GET-Anforderung, so ist der Rahmen
sieht nach einer Methode, die auf ProductsController, deren name beginnt mit
"Get...". Außerdem, die URI enthält nicht die optionalen {id}
segment, also der Rahmen sieht nach einer Methode ohne Parameter. Die
ProductsController::GetAllProducts Methode erfüllt alle diese
Anforderungen.
Was passiert, wenn gibt es zwei Methoden, wie GetAllProducts() und GetSoldProducts()? Beide haben keine Parameter.
Ihren Ersten Web-API-Anleitung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, du verwendest die Standard-Routen: die kurze Antwort lautet : die Methode definierten ersten (oben) Klasse aufgerufen werden. die andere Methode nicht möglich ist.
Stehlen Freizügig aus einem anderen Beitrag schrieb ich über das Thema:
WebAPI Passenden Semantischen
Den passenden semantischen verwendet WebAPI ist ziemlich einfach.
Also in deinem Beispielcode wird eine GET-Anforderung ohne parameter entspricht der
Get*( )
Funktion ohne Parameter. Ein Get mit und ID sieht für einGet***(int id)
.Beispiele
Während die passenden semantischen einfach ist, es schafft einige Verwirrung für MVC-Entwickler (naja, zumindest diese Entwickler). Schauen wir uns einige Beispiele an :
Seltsamen Namen - Ihre get-Methode benannt werden kann alles, solange es beginnt mit "get". Also im Fall von widget-controller Sie können den Namen für Ihre Funktionen
GetStrawberry()
und es wird noch abgestimmt werden. Denken Sie an die passenden so etwas wie :methodname.StartsWith("Get")
Mehrere Passende Methoden - Was passiert, wenn Sie zwei Get-Methoden ohne Parameter?
GetStrawberry()
undGetOrange()
. Als am besten ich kann sagen, die Funktion definiert, die erste (Anfang der Datei) in Ihrem code gewinnt ...seltsam. Dies hat den positiven Effekt, dass einige Methoden im controller nicht erreichbar (zumindest mit den Standard-Routen)....fremden.UPDATE
@WinFXGuy - Das war ein bisschen lange, um in einem Kommentar, aber ...
Nicht zu Schlussfolgerungen zu springen! Ich habe versucht, eine Antwort auf die Frage, die Sie gestellt, aber das ist nur die halbe Geschichte. Es gibt viel Sie tun können, um das Standardverhalten ändern.
Ersten, WebAPI unterstützt viel von der oData spec. Wenn Sie die Blase ein
IQueryable
bis zu Ihrem controller, oData-Parameter werden automatisch mit dem integrierten query-Objekt. Es nimmt Parameter wie$filter
,$top
, und$skip
. Damit Sie in Ihrem Fall können Sie schreiben, eine Methode, und übergeben Sie so etwas wie$filter=sale_date neq null
.Darüber hinaus können Sie die
[ResultLimit]
- Attribut, um zu verhindern, dass Menschen Fragen, für 15 Milliarden Datensätze.Zweiten können Sie ändern die Routen. Die Standard-Routen Zielen auf eine RESTful-api, wo man in der Regel 1 controller-pro Person. Sie können ändern, die Strecken und machen es RPC-style.
Wenn man sich in meinem verlinkten post habe ich erklärt, wie hielt ich die Standard-route Bindung, hat "sub-Ordner' und erlaubt auch zusätzliche Methodenaufrufe für Szenarien, in denen ich gebraucht
GetAllProducts()
undGetSoldProducts()
.Gibt es zwei mögliche Lösungen für dieses problem:
Alter MapHttpRoute Aufrufe erfordern die Angabe der Namen der Aktion. (Ich bin mit der Self-hosting-syntax):
Damit Ihr http-client nennen würde:
api/products/GetAllProducts
ODERapi/GetAllProducts
api/products/GetSoldProducts
ODERapi/GetSoldProducts
Finden Sie unter:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
Jede Methode in einem separaten controller (ProductsController, SoldProductsController). So rufen Sie
api/products
undapi/soldproducts
um Ihre Ergebnisse.Verwandtes Thema... in der situation, wo Sie mehrere Erhalten Aktionen, die eine einzelne primitive argument von der gleichen Art, ASP.NET Web-API wird der Blick auf den Namen des Arguments zu beheben, die überladene Handlung zu nennen.
Zum Beispiel, wenn Sie zwei Aktionen:
Ihre http-client aufrufen können
und die routing-engine wird call die richtige Maßnahme.
Hinzufügen einer Antwort zu reflektieren, dass die neueste version der Web-API unterstützt
[Route]
Attribut systemintern