Существует ли глагол по умолчанию для метода 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