asp.net-web-api
Маршрутизация атрибутов в WebAPI
Поиск…
Вступление
Как следует из названия, это использует атрибуты для маршрута. Это дает пользователю больше контроля над 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
}
}