Каковы основные отличия этих функций? Все, что я знаю, это все три результата в 201, что подходит для успешного запроса POST.
Я только следую примерам, которые я вижу в Интернете, но они действительно не объясняют, почему они делают то, что делают.
Мы должны предоставить имя для нашего GET (1 запись по id):
[HttpGet("{id}", Name="MyStuff")]
public async Task<IActionResult> GetAsync(int id)
{
return new ObjectResult(new MyStuff(id));
}
Какова цель именования этой функции get, кроме того, что она "вероятно" требуется для функции POST ниже:
[HttpPost]
public async Task<IActionResult> PostAsync([FromBody]MyStuff myStuff)
{
// actual insertion code left out
return CreatedAtRoute("MyStuff", new { id = myStuff.Id }, myStuff);
}
Я заметил, что CreatedAtRoute
также имеет перегрузку, которая не принимает имя маршрута.
Существует также CreatedAtAction
, который принимает аналогичные параметры. Почему этот вариант существует?
Существует также Created
, который ожидает URL и объект, который мы хотим вернуть. Могу ли я использовать этот вариант и предоставить фиктивный URL-адрес и вернуть объект, который я хочу, и выполнить его с помощью?
Я не уверен, почему существует так много вариантов, чтобы иметь возможность вернуть 201 клиенту. В большинстве случаев все, что я хочу сделать, - это вернуть уникальный идентификатор приложения (скорее всего из базы данных) или версию моего объекта, имеющего минимальную информацию.
Я думаю, что в итоге ответ 201 должен "создать" заголовок местоположения, у которого есть URL-адрес вновь созданного ресурса, который, я считаю, все 3 и их перегрузки заканчиваются. Почему я должен всегда возвращать заголовок местоположения? Мои клиенты JavaScript, родные мобильные и настольные приложения никогда не используют его. Если я, например, выдаю HTTP POST, чтобы создавать платежные заявления и отправлять их пользователям, каков был бы такой URL-адрес местоположения? (Приношу свои извинения за то, что вы не углубляетесь в историю Интернета, чтобы найти ответ для этого.)
Зачем создавать имена для действий и маршрутов? Какая разница между именами действий и именами маршрутов?
Я запутался в этом, поэтому я прибегал к возврату Ok()
, который возвращает 200, что неприемлемо для POST.