как обработать POST запрос в контроллере - PullRequest
1 голос
/ 20 ноября 2010

Похоже, что по умолчанию GET, hwo для обработки POST и других Http-действий?

Ответы [ 3 ]

7 голосов
/ 20 ноября 2010

Когда вы отправляете запрос POST, платформа автоматически вызывает действие POST. Например, если у вас есть HTML-форма:

<% using (Html.BeginForm("Index", "Home", FormMethod.Post)) {%>
    <input type="submit" value="OK" />
<% } %>

Он автоматически вызовет действие индекса POST:

[HttpPost]
public ActionResult Index()
{
    ...
}

или вы можете использовать jquery для отправки запроса AJAX и указать, что вы хотите POST:

$.post('/home/index', function(result) {
    alert('successfully invoked the POST index action');
});

Что касается других глаголов, таких как PUT и DELETE, они поддерживаются только в вызовах AJAX. Вы не можете указать это в форме HTML. Хотя есть обходной путь. Следующая форма:

<% using (Html.BeginForm("Destroy", "Home", FormMethod.Post)) {%>
    <%= Html.HttpMethodOverride(HttpVerbs.Delete) %>
    <input type="submit" value="OK" />
<% } %>

вызовет это действие:

[HttpDelete]
public ActionResult Destroy() {}

Способ, которым это работает, заключается в том, что используется глагол POST, но вместе с запросом отправляется дополнительное скрытое поле, которое позволяет механизму направить к правильному действию контроллера. Если вы используете AJAX, вы можете указать непосредственно нужный глагол:

$.ajax({
    url: '/home/destroy',
    type: 'DELETE',
    success: function(result) {
    }
});
2 голосов
/ 20 ноября 2010

добавьте этот атрибут в ваш метод действия:

[HttpPost]
0 голосов
/ 20 ноября 2010

Просто убедитесь, что в aspx ваш метод действия обработки является действием для формы POST, и вы готовы пойти:

using(Html.BeginForm("ActionName", "ControllerName") {}

ActionName - это метод, который будет обрабатывать POST.1004 *

Или я неправильно понял вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...