Я новичок в программировании Web Api и впервые работаю над веб-приложением .Net Framework. Я оборачиваю некоторые из своих объектов в вызовы Web Api, и мне было интересно, есть ли какие-либо различия между этими двумя методами маршрутизации в моих контроллерах? Я не хочу начинать использовать один только для того, чтобы позже узнать, что у него есть какие-то недостатки и т. д.
Первый способ - указать маршрут перед классом:
[Route("api/[controller]/[action]")]
public class SomeController : Controller {
[HttpGet("{parameter}")]
public Object SomeMethod(int parameter) { ... }
(...)
}
а второй метод - указать маршрут перед каждым методом:
[Route("api/[controller]")]
public class SomeController : Controller {
[HttpGet("SomeMethod/{parameter}")]
public Object SomeMethod(int parameter) { ... }
(...)
}
У меня просто недостаточно опыта, чтобы знать, в чем разница между этими двумя блоками кода и есть ли другие более эффективные способы сделать это. Спасибо!
Мне также нужно будет реализовать Post, Put, Delete и т. д. В будущем.





Разница между двумя вариантами заключается в наличии [action] в URL-адресе шаблона. Так что, если вы понимаете, как работает [controller], вам будет легко понять и назначение [action].
Первый вариант ([Route("api/[controller]/[action]")]) лучше, если вы не хотите беспокоить себя, когда переименовываете свой метод действия. С этой опцией, в будущем, если вы переименуете свой метод действия, он будет автоматически отражаться в URL-адресе. На самом деле у вас есть api/some/somemethod в качестве URL-адреса, но если вы переименуете SomeMethod в MySuperSomeMethod, новый URL-адрес будет api/some/mysupersomemethod.
Второй вариант использует [HttpGet("SomeMethod/{parameter}")], а имя вашего метода действия находится внутри маршрута шаблона. Поэтому, если вы переименуете SomeMethod в MySuperSomeMethod, сгенерированный URL всегда будет api/some/somemethod.