Обычно, когда вы размещаете свой веб-сайт (я предполагаю, что ASP .Net MVC здесь) на IIS, ваши запросы, отправляемые на серверную часть, будут в основном попадать только в две категории http-глаголов: GET
или POST
. Посмотрите приведенный ниже код ASP.NET MVC. На уровне контроллера можно декорировать свои действия, используя любой из HTTP глаголов, хотя:
Теперь давайте сначала понять, если мы используем обычный ванильный ASP .NET MVC Framework (без Java Script), то почему каждый запрос относится только к двум категориям, а именно GET
и POST
.
Предположим, у меня есть вид (ака веб-страницы) на моем сайте, который отвечает за регистрацию новых пользователей, посещающих мой сайт.Вы увидите код контроллера, как показано ниже:
namespace MvcTestApp.Controllers
{
// GET: /Account/Register
[HttpGet]
public ActionResult Register()
{
return View();
}
//
// POST: /Account/Register
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
}
}
Вы набираете http://localhost:9896/Account/Register/
URL в адресной строке браузера для загрузки регистра просмотра/веб-страницы в вашем браузере. Это похоже на первый запрос на веб-страницу, поэтому ваш браузер автоматически по умолчанию использует его до HttpGet
глагола, когда вы получаете веб-страницу в первый раз. Так что в этом случае ниже метода с аннотацией [HttpGet]
глагола вызывается:
[HttpGet]
public ActionResult Register()
{
return View();
}
Теперь на странице У меня есть кнопка, которая, когда я нажимаю, чтобы начать процесс регистрации, как только я предоставил все детали, связанные с регистрацией. Если вы посмотрите на исходный код веб-страницы, то вы видите ниже HTML код для кнопки:
<input type="submit" value="Register" />
Всякий раз, когда вы нажимаете на элемент управления HTML типа submit
его простая работа заключается в том, чтобы опубликовать/отправить обновленное содержимое из текущей страницы на сервер. Любой из элементов управления html, включая контроль над html input
, который делает запрос на стороне сервера, способен выполнять только HttpPost
глагольных запросов через браузер. Так как это запрос httpPost
на сервер для точно такого же URL-адреса, вызывается вызываемый ниже метод, который украшен HttpPost
. ASP.Net время выполнения получает эту информацию от клиента запроса, что это на самом деле запрос HTTP POST, и, следовательно, решает вызвать метод ниже на контроллере, имеющий [HttpPost]
аннотации:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
.....
.....
}
Таким образом, до тех пор, как вы не используя какой-либо javascript на вашей странице просмотра/веб-страницы, вы, в конечном счете, делаете запрос http (первый раз) или http-сообщение (используя запрос html submit).
Из операций CRUD операции «Создать и обновить/изменить» обрабатываются тем же методом, который аннотируется с помощью [HttpPost]
.
HTTP ставить глагол используется для создания/замены ресурса, когда два ниже условий:
- конечная точка должна быть тождественной: так безопасно повторить запрос снова и снова.
- URI должен быть адресом обновляемого ресурса.
Вы можете прочитать больше о put vs post here.
Итак, если ваш бизнес-сценарий на стороне сервера будет способен управлять ограничениями, связанными с HTTP-глаголом, тогда для ASP.NET MVC предусмотрено это условие. Вы можете создать действие внутри контроллера и украсить его с помощью [HttpPut]
и вызвать его, используя HTTP-глагол из браузера.
Ну, даже если в каком-то сценарии, где вы выполняете критерии, установленные глаголом put, вы не сможете вызвать его, используя кнопку отправки HTTP. Вам придется прибегнуть к Java Script XMLHttpRequest (т.е. AJAX вызовов), чтобы положить глагол вызовов, как показано ниже:
$.ajax({
url: '/Account/Register',
type: 'PUT',
success: function(result) {
// Do something with the result
}
});
Кроме того, вокруг использования HTTP удалить глагол Я вижу человек, явно имеющие действие, определенное на контроллер MVC, например void DeleteUser(int userId)
, который вызывается с помощью http POST-глагола.
Итак, мы можем видеть, что для глаголов http PUT, POST и DELETE у нас есть только действия/методы на стороне сервера, которые вызывается с использованием http POST-глагола. Я не встречал сценарий в обычных бизнес-приложениях, где я когда-либо думал о том, чтобы украсить мои действия MVC с помощью [HttpPut]
или [HttpDelete]
.
Надеюсь, что это поможет вам получить разъяснения.
«Это зависит». В случае веб-приложения веб-сервер обычно будет «передавать» управление веб-стеку (например, ASP.NET). Тем не менее, для различных запросов (если они не перехватываются) веб-сервер будет вполне счастлив, обслуживая «статический контент». Часто используются «сопоставления» и «обработчики». –
Читайте это: http://www.apacheweek.com/features/put –