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 
}

}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow