Для метода 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 не могут перенаправляться на новый ресурс. Я перепутал, генерируя правильный ответ, или веб-браузеры не ожидают такого типа ответа, вместо этого полагаясь на серверы для отправки ответа на перенаправление?