Метод DELETE не работает

62
7

Я написал контроллер WebApi, который содержит следующий метод для удаления клиента...

[HttpDelete]
public void DeleteClient(int id) {
// do stuff here
}

... и пытаюсь проверить его, используя следующий HTML на веб-странице...

<form method="DELETE" action="/api/ClientsXml/">
<table style="padding: 5px">
<tr>
<td>ID</td>
<td><input type="text" size="20" name="id" id="id" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Send" /></td>
</tr>
</table>
</form>

Однако метод DeleteClient никогда не вызывается. Вместо этого он передает запрос методу GetClient.

Кто-нибудь понимает, почему? Я пробовал всевозможные варианты, но я просто не могу получить метод удаления.

спросил(а) 2021-01-19T14:24:54+03:00 3 месяца, 2 недели назад
1
Решение
62

Ответ @DimitryS правильный, но я думал, что немного опишу его.

Формы HTML допускают только операции GET и POST. Это актуально в спецификации HTML 5, а также в спецификации HTML <4.

Другие HTTP-методы разрешены при использовании XMLHttpRequest, что и является основой jQuery ajax. Поэтому хорошим вариантом может быть использование jQuery для ваших PUT, DELETE, и он должен работать во всех основных браузерах (некоторые обсуждения этого в этом довольно окончательном вопросе SO: доступны ли методы PUT, DELETE, HEAD и т.д. В большинстве веб-браузеров?).

Наконец, я скажу, что если вы просто используете форму для проверки своего API, то почему бы вам не попробовать расширение браузера: например

Их гораздо больше, но большинство из них позволяет сохранить набор тестов, установить разные заголовки и т.д.

ответил(а) 2021-01-19T14:24:54+03:00 3 месяца, 2 недели назад
63

Браузеры обычно могут выполнять только GET или POST для элементов формы (если вы не отправляете их с помощью AJAX).

Вы должны изменить метод формы на POST и добавить следующий элемент HTML:

<input name="X-HTTP-Method-Override" type="hidden" value="DELETE" />

Так MVC позволяет переопределять методы HTTP для синхронных POST.

Изменение: в этом сообщении объясняется, как сделать поддержку веб-API одним и тем же соглашением: qaru.site/questions/43919/...

ответил(а) 2021-01-19T14:24:54+03:00 3 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема