WebAPI маршрутизация на определенный метод контроллера по имени - PullRequest
0 голосов
/ 23 января 2019

Вот что у меня сейчас: один маршрут и все контроллеры до сих пор подтверждают это и прекрасно работают.Мы хотим сохранить их как есть.

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
                name: "DitatApi",
                routeTemplate: "api/{controller}/{action}"

Теперь мы создали новый контроллер, но нам нужно его маршрутизировать по-другому.Ниже приведен код контроллера и порядок маршрутизации этих методов.Как настроить такой маршрут?

public class CarrierController : ApiController
{
    [HttpGet]
    public object Get(string id, int? key, string direction)
    {
        return null;
    }

    [HttpPost]
    public object Update()
    {
        return null;
    }

    [HttpDelete]
    public object Delete(int key)
    {
        return null;
    }

    [HttpGet]
    public object GenerateRandomObject(int randomParam)
    {
        return null;
    }
}
  1. GET /api/carrier?id=<id>&key=<key>&direction=<direction>
  2. POST /api/carrier
  3. DELETE /api/carrier?key=<key>
  4. GET /api/carrier/random?randomParam=<random>

1 Ответ

0 голосов
/ 23 января 2019

WebApi v2 представила атрибуты маршрута , которые можно использовать вместе с вашим классом контроллера и могут упростить настройку маршрутизации.

Например:

 public class BookController : ApiController{
     //where author is a letter(a-Z) with a minimum of 5 character and 10 max.      
    [Route("html/{id}/{newAuthor:alpha:length(5,10)}")]
    public Book Get(int id, string newAuthor){
        return new Book() { Title = "SQL Server 2012 id= " + id, Author = "Adrian & " + newAuthor };
    }

   [Route("json/{id}/{newAuthor:alpha:length(5,10)}/{title}")]
   public Book Get(int id, string newAuthor, string title){
       return new Book() { Title = "SQL Server 2012 id= " + id, Author = "Adrian & " + newAuthor };
   }
...

Однако обратите внимание, что параметры запроса ? Var1 = 1 & var2 = 2 не подлежат оценке, чтобы решить, какой метод API будет использоваться.

WebApi работает на основе отражения, поэтому это означает, что ваши фигурные скобки {vars} должны совпадать с именем в ваших методах.

Поэтому для соответствия чему-то подобному api/Products/Product/test ваш шаблон должен выглядеть следующим образом "api/{controller}/{action}/{id}", и ваш метод должен быть объявлен следующим образом:

[ActionName("Product")]
[HttpGet]
public object Product(string id){
   return id;
}

Где параметр string name былзаменено на string id.

...