Поиск…


Вступление

Как следует из названия, это использует атрибуты для маршрута. Это дает пользователю больше контроля над URI в WebAPI. Например, вы можете описать иерархии ресурса. Однако более ранняя «Обычная маршрутизация» полностью поддерживается. У пользователей может быть смесь обоих.

Синтаксис

  • [RoutePrefix ("api / books")] - для класса контроллера
  • [Маршрут («getById»)] - для действий
  • [Маршрут ("~ / api / authors / {authorId: int} / books")] - для переопределения префикса маршрута

параметры

Имя параметра подробности
RoutePrefix атрибут класса контроллера. все распространенные префиксы url в действиях здесь. берет строку в качестве входных данных
маршрут атрибут действий контроллера. каждое действие будет иметь маршрут, ассоциированный с (не обязательно)
Маршрут ( "~ / апи /") это переопределяет префикс маршрута

замечания

В настоящее время в маршрутах атрибутов нет Controller specific Message Handlers . Поскольку нет способа указать, какой обработчик выполнить для какого маршрута во время объявления. Это возможно в Conventional Routing .

Маршрутизация основных атрибутов

Просто добавьте атрибут к действию контроллера

[Route("product/{productId}/customer")]
public IQueryable<Product> GetProductsByCustomer(int productId) 
{ 
    //action code goes here 
}

это будет запрошено как /product/1/customer а productId=1 будет отправлено на действие контроллера.

Удостоверьтесь, что внутри «{}» и параметр действия одинаковы. productId в этом случае.

перед использованием этого вы должны указать, что используете атрибутивную маршрутизацию:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
    }
}

Атрибут префикса маршрута

В тех случаях, когда вам нужна общая часть маршрута для всех маршрутов в контроллере, RoutePrefix атрибут RoutePrefix .

В приведенном ниже примере часть кода api / students является общей и поэтому мы можем определить RoutePrefix и не использовать ее повторно.

[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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow