PUT или DELETE глагол в ASP.NET MVC в форме HTML - PullRequest
13 голосов
/ 18 ноября 2011

У меня есть простая форма регистрации пользователя, с двумя полями, одно для имени пользователя и другое для пароля.У меня есть контроллер с именем 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 ]

24 голосов
/ 10 ноября 2012

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

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


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

7 голосов
/ 18 ноября 2011

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

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

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


UPDATE

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

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

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

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

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

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

4 голосов
/ 18 ноября 2011

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

Здесь является примером

...