PUT или DELETE глагол в ASP.NET MVC в форме HTML

У меня есть простая форма регистрации пользователя, с двумя полями, одно для имени пользователя и другое для пароля. У меня есть контроллер называется UserController который имеет эти два действия:

[HttpGet]
public ActionResult Register()
{
    return View();
}

[HttpPut]
public ActionResult Register(string username, string password)
{
    // Registering user
    return View();
}

Я использовал HTTP Put, чтобы сделать мой сайт RESTful (глагол PUT для вставки). Однако, когда я отправляю свою форму, я получаю ошибку 404. Вот HTML-код моей формы:

<form action='@Url.Action("Register", "User")' method="post">
<div class='field'>
    <label for='username'>
        Username:
    </label>
    <input type='text' id='username' name='username' maxlength='100' />
</div>
<div class='field'>
    <label for='password'>
        Password:
    </label>
    <input type='password' id='password' name='password' maxlength='50' />
</div>
</form>

Что мне здесь не хватает? В чем дело?

3 ответа

Так как здесь никто действительно не ответил, я добавлю свои.02

MVC добавляет следующее поле в html-форму (используется, например, при использовании Html.BeginForm()) для поддержки этого. Несмотря на то, что HttpPut и HttpDelete фактически не поддерживаются для Html5 (они были в одной точке, а затем удалены из черновой спецификации), серверные библиотеки для MVC будут правильно перенаправлять запрос в ваш метод HttpDelete или HttpPut, когда следующее поле формы будет опубликовано с Ваш запрос HttpPost:


@using (Html.BeginForm("SomeAction"){ 
   @Html.HttpMethodOverride(HttpVerbs.Delete)
}

HTML-формы (до HTML версии 4 и XHTML 1) поддерживают только GET и POST как методы HTTP-запроса. XHTML 2.0 будет поддерживать GET, POST, PUT и DELETE для форм.

Обходной путь для этого для методов через POST, используя скрытое поле формы, которое читается сервером и отправляется соответствующим образом.

Сейчас вы можете рассмотреть возможность использования [HttpPost] сейчас или использовать XmlHttpRequest использовать Put глагол по вашему запросу.


ОБНОВИТЬ

Вы можете использовать SimplyRestfulRouteHandler от MvcContrib

Это довольно просто, зарегистрируйтесь на RegisterRoutes

public static void RegisterRoutes(RouteCollection routes)
{
     SimplyRestfulRouteHandler.BuildRoutes(routes);
}

Добавить hidden поле как это с именем _method внутри вашего form

<input type="hidden" name="_method" value="put" />

Это было бы хорошо, чтобы пойти.

Вы можете использовать $.ajax для отправки формы с правильным глаголом

Вот пример

Другие вопросы по тегам