asp.net-web-api
Attribut Routing i WebAPI
Sök…
Introduktion
Som namnet antyder använder detta attribut för att ruttas. Detta ger användaren mer kontroll över URI: erna i WebAPI. Du kan till exempel beskriva resursens hierarkier. Men den tidigare "konventionella routningen" stöds fullt ut. Användare kan också ha en blandning av båda.
Syntax
- [RoutePrefix ("api / books")] - för controller-klassen
- [Rutt ("getById")] - för åtgärder
- [Rutt ("~ / api / author / {authorId: int} / books")] - för att åsidosätta ruttprefix
parametrar
| Parameternamn | detaljer |
|---|---|
| RoutePrefix | attribut till regulatorklassen. alla vanliga url-prefix i handlingar är klubbade här. tar sträng som inmatning |
| Rutt | attribut till controller-handlingarna. varje åtgärd kommer att ha en rutt associerad med (inte nödvändigtvis) |
| Route ( "~ / api /") | detta åsidosätter Ruttprefixet |
Anmärkningar
För närvarande har attributrutor inga Controller specific Message Handlers . Det finns inget sätt att ange vilken hanterare som ska utföra för vilken rutt vid tidpunkten för deklarationen. Detta är möjligt i Conventional Routing .
Grundläggande attribut routing
Lägg bara till ett attribut till controller-handlingen
[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId)
{
//action code goes here
}
detta kommer att fråga som /product/1/customer och productId=1 kommer att skickas till controlleråtgärden.
Se till att den inom '{}' och åtgärdsparametern är desamma. productId i detta fall.
innan du använder detta måste du ange att du använder attributruting genom att:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
}
}
Ruttprefixattribut
I de fall du behöver en gemensam del av rutten för alla rutter inom en controller används RoutePrefix attributet.
I exemplet nedan är en del av koden api / studenter vanlig och så vi kan definiera RoutePrefix och undvika att använda den upprepade gånger.
[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
}
}