Существует ли глагол по умолчанию для метода API ApiController API?

Я просматривал код (https://github.com/patelsan/WebAPIAuthentication): http://www.codeproject.com/Articles/630986/Cross-Platform-Authentication-With-ASP-NET-Web-API.

Это довольно хорошо и, кажется, работает нормально. Есть очень мало статей, объясняющих эту маркерную аутентификацию, но это лучшее, что я видел. Обратите внимание, что я новичок в этой технологии и там много чему поучиться.

Итак, я заметил, что у UserController есть этот код:

public class UsersController : ApiController
{
    public Status Authenticate(User user)
    {
        . . .
    }
}

Метод Authenticate не начинается с известного HTTP-глагола, например. Получить или Опубликовать, и нет атрибута [HttpGet] или [HttpPost], связанного с этим методом, так как контроллер знает, с каким глаголом связывать этот метод? Просто взглянув на код, как я могу определить, какой глагол мне нужно использовать? Есть ли такая вещь, как "по умолчанию" глагол, если ничего не соответствует?

Кстати, на случай, если вам интересно, единственный глагол, который работает, - POST. Я хотел бы понять, почему это так.

Ответ 1

Загрузите это при изучении чего-то нового каждый день!

Обычно сопоставление имени метода думает об этом. Однако, глядя на источник WebAPI, существует логика для возврата. Если имя метода не сопоставляется (через атрибут или соглашение) с поддерживаемым HTTP-глаголом, то по умолчанию используется POST.

По умолчанию выбор действия происходит через класс ReflectedHttpActionDescriptor. Важным здесь является GetSupportedHttpMethods(). В соответствующей части код гласит:

        if (supportedHttpMethods.Count == 0)
        {
            // Use POST as the default HttpMethod
            supportedHttpMethods.Add(HttpMethod.Post);
        }

Вы можете увидеть полный источник здесь (около середины файла).

Ответ 2

В этом специальном случае Http-адрес по умолчанию POST. В других сценариях глагол по умолчанию зависит от имени действия и других факторов. Ниже приведен алгоритм с asp.net:

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

  • Вы можете указать HTTP-метод с атрибутом: AcceptVerbs, HttpDelete, HttpGet, HttpHead, HttpOptions, HttpPatch, HttpPost или HttpPut.

  • В противном случае, если имя действия (метод контроллера) начинается с "Get", "Post", "Put", "Delete", "Head", "Options" или "Патч", то по соглашению действие поддерживает этот метод HTTP.

  • Если ничего из вышеперечисленного, метод поддерживает POST.

http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection