Для метода POST спецификации W3 говорят:
Если ресурс был создан на исходном сервере, ответ
ДОЛЖЕН быть 201 (Создан) и содержать объект, который описывает
статус запроса и ссылается на новый ресурс и местоположение
заголовок (см. раздел 10.4).
http://www.ietf.org/internet-drafts/draft-ietf-httpbis-p2-semantics-05.txt (раздел 8.5)
Стандартный ответ на самом деле, кажется, заключается в отправке перенаправления на вновь созданный ресурс.
Я строю свой сайт с помощью ASP.NET MVC и пытался следовать спецификации, поэтому создал класс ResourceCreatedResult
:
public class ResourceCreatedResult : ActionResult
{
public string Location { get; set; }
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Clear();
context.HttpContext.Response.StatusCode = 201;
context.HttpContext.Response.ClearHeaders();
context.HttpContext.Response.AddHeader("Location", Location);
}
}
И мое действие выглядит примерно так:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateNew(string entityStuff)
{
Entity newEntity = new Entity(entityStuff);
IEntityRepository entityRepository = ObjectFactory.GetInstance<IEntityRepository>();
entityRepository.Add(newEntity);
ActionResult result = new ResourceCreatedResult()
{ Location = Url.Action("Show", new { id = newEntity.Id }) };
return result;
}
Однако IE, Firefox и Chrome не могут перенаправить на новый ресурс. Я испортил правильный ответ или веб-браузеры не ожидают такого ответа, полагаясь на то, что сервер отправляет ответ Redirect?