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 для отправки формы с правильным глаголом
Вот пример