Неявные глаголы из имени метода

Если я создам webApi controller и заполню его методами с префиксом HTTP-глаголов, API сможет правильно указать, какой глагол следует использовать на этом контроллере.

public class TestController : ApiController
{
    public string GetData()
    {
        return "Called Get Method";
    }

    public string PostData()
    {
        return "Called Post Method";
    }

    public string PutData()
    {
        return "Called Put Method";
    }
}

Если я заменю Post на Update, метод Post продолжит работать неявно.

public string UpdateData()
{
    return "Called Updated Method";
}

Есть ли список возможных префиксов метода и с каким глаголом они сопоставляются? Кроме того, возможно ли определить пользовательские префиксы? Например, если я хочу всегда сопоставлять метод, начинающийся с «Поиск», с Post, могу ли я определить это?


person Obsidian Phoenix    schedule 30.07.2015    source источник


Ответы (2)


Если вы поместите свой Routing следующим образом:

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

Обратите внимание на routeTemplate. Теперь вы сможете вызывать action на controller по имени, и проблем с prefix быть не должно. Этот подход очень полезен, если у вас есть несколько действий на вашем controller с похожими HTTP Verbs (скажем, несколько GET или POST).

person Amit Kumar Ghosh    schedule 30.07.2015

Неявные глаголы являются функцией встроенной маршрутизации и не могут быть расширены вручную.

Этот Asp.Net детализирует конкретные правила неявной маршрутизации.

HTTP-методы. Платформа выбирает только те действия, которые соответствуют HTTP-методу запроса, определяемому следующим образом:

  1. Вы можете указать метод HTTP с помощью атрибута: AcceptVerbs, HttpDelete, HttpGet, HttpHead, HttpOptions, HttpPatch, HttpPost или HttpPut.
  2. В противном случае, если имя метода контроллера начинается с "Get", "Post", "Put", "Delete", "Head", "Options" или "Patch", то по соглашению действие поддерживает это HTTP-метод.
  3. Если ничего из перечисленного выше, метод поддерживает POST.

Причина, по которой метод UpdateData работает, заключается в том, что любой метод, не определенный неявно, автоматически является Post

person Obsidian Phoenix    schedule 31.07.2015
comment
Я пытался выяснить, как шаблон AccountController определяет GET и POST. Чрезвычайно полезно, спасибо! - person Dan Bechard; 20.04.2016