asp.net-web-api
Routing atrybutów w WebAPI
Szukaj…
Wprowadzenie
Jak sama nazwa wskazuje, wykorzystuje to atrybuty do trasowania. Daje to użytkownikowi większą kontrolę nad identyfikatorami URI w interfejsie WebAPI. Na przykład możesz opisać hierarchie zasobu. Jednak wcześniejsze „routing konwencjonalny” jest w pełni obsługiwany. Użytkownicy mogą mieć również mieszankę obu.
Składnia
- [RoutePrefix („api / books”)] - dla klasy kontrolera
- [Route („getById”)] - dla akcji
- [Route ("~ / api / autorzy / {authorId: int} / books")] - w celu zastąpienia prefiksu trasy
Parametry
| Nazwa parametru | Detale |
|---|---|
| RoutePrefix | atrybut do klasy kontrolera. wszystkie typowe prefiksy adresów URL w działaniach są tutaj przypisane. pobiera ciąg jako dane wejściowe |
| Trasa | atrybut działań kontrolera. każda akcja ma przypisaną trasę (niekoniecznie) |
| Trasa („~ / api /”) | zastępuje to prefiks trasy |
Uwagi
Obecnie trasy atrybutów nie mają Controller specific Message Handlers . Ponieważ nie ma sposobu, aby określić, który moduł obsługi należy wykonać dla której trasy w momencie deklaracji. Jest to możliwe w przypadku Conventional Routing .
Podstawowy routing atrybutów
Po prostu dodaj atrybut do akcji kontrolera
[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId)
{
//action code goes here
}
zostanie to zapytane, ponieważ /product/1/customer i productId=1 zostanie wysłany do akcji kontrolera.
Upewnij się, że parametr „{}” i parametr akcji są takie same. productId w tym przypadku.
przed użyciem tego musisz określić, że używasz routingu atrybutów przez:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
}
}
Atrybut prefiksu trasy
W przypadkach, gdy potrzebujesz wspólnej części trasy dla wszystkich tras w kontrolerze, RoutePrefix jest atrybut RoutePrefix .
W poniższym przykładzie część kodu interfejsu API / studentów jest wspólna, dlatego możemy zdefiniować RoutePrefix i unikać wielokrotnego używania.
[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
}
}