Я использую ASP.NET CORE и в настоящее время изучаю REST API. Итак, я знаю разницу между разными глаголами, но не могу объяснить себе одну вещь. Если у нас есть URL-адрес - /customers/{id}, и мы используем его для ПОЛУЧЕНИЯ и ОТПРАВКИ клиента. Как он мог сказать, следует ли читать или создавать нового клиента?
В контроллере я мог бы иметь это:
[HttpGet]
public IActionResult Customer(string id)
{
// not important
}
[HttpPost]
public IActionResult Customer(string id)
{
// not important
}
Итак, я хочу создать нового клиента и использовать /customers/{John}. Как бы он выбрал HttpPost вместо HttpGet, если они оба имеют одинаковые параметры?
Это просто сценарий, допустим, я вызываю это /customers/{id} через html-страницу, где у меня есть ввод для {id}.





Это указывается потребителем API. Поскольку вы сказали, что вызываете его с веб-страницы, проиллюстрируйте пример с использованием javascript принести API.
ПОСТ пример:
fetch("/customers/' + custId, {
method: 'POST',
body: JSON.stringify(data), //data being your customer data
headers:{
'Content-Type': 'application/json'
}
}).then(res => res.json())
.then(response => console.info('Success:', JSON.stringify(response)))
.catch(error => console.error('Error:', error));
ПОЛУЧИТЬ пример:
fetch("/customers/' + custId) //if not specified, fetch defaults to GET
.then(res => res.json())
.then(response => console.info('Success:', JSON.stringify(response)))
.catch(error => console.error('Error:', error));
Хорошо, это я понимаю, спасибо. Однако, где мне указать, что запрос должен быть POST, если я являюсь клиентом и нажимаю кнопку «Создать клиента», эта кнопка должна быть связана с запросом POST, как это происходит? Если у меня те же параметры, что и в GET-запросе, как сервер узнает, какой HTTP-глагол ему следует использовать?
Вы оборачиваете каждый из этих запросов в функцию: getCustomer(id) и createCustomer(data). Затем вы сопоставляете свою кнопку Создать клиента с последней функцией (например, onClick или onSubmit). При этом нажатие на Создать клиента отправит запрос POST на сторону сервера. На стороне сервера этот запрос будет обработан функцией, уже отмеченной [HttpPost]. Вот что означает эта аннотация; он будет обрабатывать только POST-запрос.
Готово, могу я спросить, как мы добьемся этого в ASP.NET? Я полагаю, я делаю это через форму, точно так же, как <form method = "post"> // text </form>, указав, что запрос метода должен быть POST?
Конечно, можно использовать форму. Я не знаю ASP.NET, но предполагаю, что это решение не будет специфичным для этой платформы. Вы используете обычный HTML и JavaScript на лицевой стороне, верно? Тогда да, вы можете использовать обычную отправку формы с помощью метода = "post"
Здоровья, приятель! Вы были очень полезны!
Это определяется вашим интерфейсом или тем, что вызывает ваш API. Независимо от того, используете ли вы curl, fetch, axios, httpie, свой браузер или что-то еще, использующее протокол http для чтения или записи, необходимо указать, какой HTTP-глагол используется. Как вы называете свой API?