asp.net-web-api
Attribuutroutering in WebAPI
Zoeken…
Invoering
Zoals de naam al doet vermoeden, gebruikt dit attributen voor de route. Dit geeft de gebruiker meer controle over de URI's in de WebAPI. U kunt bijvoorbeeld hiërarchieën van de resource beschrijven. De eerdere 'conventionele routing' wordt echter volledig ondersteund. Gebruikers kunnen ook een combinatie van beide hebben.
Syntaxis
- [RoutePrefix ("api / books")] - voor controller-klasse
- [Route ("getById")] - voor acties
- [Route ("~ / api / auteurs / {authorId: int} / books")] - voor het negeren van het routeprefix
parameters
| Parameternaam | Details |
|---|---|
| RoutePrefix | kenmerk aan de controllerklasse. alle gebruikelijke URL-voorvoegsels in acties worden hier geknuppeld. neemt string als invoer |
| Route | kenmerk aan de controlleracties. aan elke actie is een route gekoppeld (niet noodzakelijk) |
| Route ( "~ / api /") | dit vervangt het routevoorvoegsel |
Opmerkingen
Momenteel heeft Attribute Routes geen Controller specific Message Handlers . Omdat er op het moment van aangifte geen manier is om aan te geven welke handler voor welke route moet worden uitgevoerd. Dit is mogelijk in Conventional Routing .
Basic Attribute Routing
Voeg eenvoudig een kenmerk toe aan de controlleractie
[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId)
{
//action code goes here
}
dit wordt opgevraagd als /product/1/customer en productId=1 wordt naar de controlleractie verzonden.
Zorg ervoor dat die binnen '{}' en de actieparameter hetzelfde zijn. productId in dit geval.
voordat u dit gebruikt, moet u opgeven dat u Attribute Routing gebruikt door:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
}
}
Kenmerk routevoorvoegsel
In gevallen waarin u een gemeenschappelijk gedeelte van de route nodig hebt voor alle routes binnen een controller, RoutePrefix kenmerk RoutePrefix gebruikt.
In het onderstaande voorbeeld is een deel van de code api / studenten gebruikelijk en daarom kunnen we RoutePrefix definiëren en vermijden het herhaaldelijk te gebruiken.
[RoutePrefix("api/students")]
public class StudentController : ApiController
{
[Route("")]
public IEnumerable<Student> Get()
{
//action code goes here
}
[Route("{id:int}")]
public Student Get(int id)
{
//action code goes here
}
[Route("")]
public HttpResponseMessage Post(Student student)
{
//action code goes here
}
}