asp.net-web-api
URL-routing van web-API
Zoeken…
Hoe Routing werkt in asp.net webapi
In ASP.NET Web API is een controller een klasse die HTTP-aanvragen verwerkt. De openbare methoden van de controller worden actiemethoden of gewoon acties genoemd.
Wanneer het Web API-framework een aanvraag ontvangt, wordt de aanvraag naar een actie geleid. Om te bepalen welke actie moet worden aangeroepen, gebruikt het framework een routingtabel. De Visual Studio-projectsjabloon voor Web API maakt een standaardroute:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "**api/{controller}/{id}**",
defaults: new { id = RouteParameter.Optional }
);
Deze route wordt gedefinieerd in het bestand WebApiConfig.cs, dat in de map App_Start wordt geplaatst:
Elk item in de routetabel bevat een routesjabloon. De standaardroutsjabloon voor Web API is " api / {controller} / {id} ". In deze sjabloon is " api " een letterlijk padsegment en zijn { controller } en { id } variabelen voor tijdelijke aanduiding.
Wanneer het Web API-framework een HTTP-verzoek ontvangt, probeert het de URI te matchen met een van de routesjablonen in de routeringstabel. Als er geen route overeenkomt, ontvangt de client een 404-fout.
De volgende URI's komen bijvoorbeeld overeen met de standaardroute:
- / Api / waardes
- / Api / waarden / 1
De volgende URI komt echter niet overeen, omdat deze het segment ' api ' mist:
- / Waarden / 1
Zodra een overeenkomende route is gevonden, selecteert Web API de controller en de actie:
- Om de controller te vinden, voegt Web API "Controller" toe aan de waarde van de variabele {controller}.
- Om de actie te vinden, kijkt Web API naar de HTTP-methode en zoekt vervolgens naar een actie waarvan de naam begint met de naam van die HTTP-methode. Met een GET-verzoek zoekt de Web API bijvoorbeeld naar een actie die begint met "Get ...", zoals "GetEmployee" of "GetAllEmployees". Deze conventie is alleen van toepassing op GET-, POST-, PUT- en DELETE-methoden.
U kunt andere HTTP-methoden inschakelen door attributen op uw controller te gebruiken. We zullen daar later een voorbeeld van zien.
- Andere variabelen voor tijdelijke aanduiding in de routesjabloon, zoals {id}, worden toegewezen aan actieparameters.
HTTP-methoden In plaats van de naamgevingsconventie voor HTTP-methoden te gebruiken, kunt u de HTTP-methode voor een actie expliciet opgeven door de actiemethode te decoreren met het kenmerk HttpGet, HttpPut, HttpPost of HttpDelete.
In het volgende voorbeeld wordt de methode EmployeeGetEmployee toegewezen aan GET-aanvragen:
public class EmployeesController : ApiController
{
[HttpGet]
public EmployeeGetEmployee(id) {}
}
Als u meerdere HTTP-methoden voor een actie wilt toestaan of andere HTTP-methoden dan GET, PUT, POST en DELETE wilt toestaan, gebruikt u het kenmerk AcceptVerbs, dat een lijst met HTTP-methoden bevat.
public class EmployeesController: ApiController
{
[AcceptVerbs("GET", "HEAD")]
public Employee GetEmployee (id) { }
}
Routing op actienaam
Met de standaard routingsjabloon gebruikt Web API de HTTP-methode om de actie te selecteren. U kunt echter ook een route maken waarbij de actienaam in de URI is opgenomen:
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
In deze routesjabloon geeft de parameter {action} de actiemethode op de controller aan. Gebruik bij deze manier van routeren attributen om de toegestane HTTP-methoden te specificeren. Stel bijvoorbeeld dat uw controller de volgende methode heeft:
public class EmployeesController: ApiController
{
[HttpGet]
public List<Employee> GetAllEmployees();
}
In dit geval zou een GET-verzoek voor " api / Employees / GetAllEmployees " worden toegewezen aan de methode GetAllEmployees.
U kunt de actienaam vervangen door het kenmerk ActionName te gebruiken. In het volgende voorbeeld zijn er twee acties die verwijzen naar " api / Employees / ShowAllEmployees / id . De ene ondersteunt GET en de andere ondersteunt POST:
public class EmployeesController : ApiController
{
[HttpGet]
[ActionName("ShowAllEmployees")]
public List<Employee> GetAll(int id);
[HttpPost]
[ActionName("ShowAllEmployees")]
public void GetAll (int id);
}
Non-acties
We kunnen voorkomen dat een methode als actie wordt aangeroepen met behulp van het kenmerk NonAction. Dit geeft het raamwerk aan dat de methode geen actie is, zelfs als deze anders zou overeenkomen met de routeringsregels.
[NonAction]
public string GetValues() { ... }
Op werkwoorden gebaseerde routingvoorbeelden.
Dezelfde URl voor verschillende http-methoden werkt anders. Hieronder is een tabel met hetzelfde beeld.
| HTTP VERB | URL | BESCHRIJVING |
|---|---|---|
| KRIJGEN | / Api / studenten | Retourneert alle studenten |
| KRIJGEN | / Api / studenten / 5 | Retourneert details van student-id = 5 |
| POST | / Api / studenten | Voeg een nieuwe student toe |
| LEGGEN | / Api / studenten / 5 | Update student met ID = 5 |
| DELETE | / Api / studenten / 5 | Verwijder student met ID = 5 |