asp.net-mvc – 对HTTP POST请求的正确响应是什么?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 对HTTP POST请求的正确响应是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于POST方法,W3规范说:

If a resource has been created on the origin server,the response
SHOULD be 201 (Created) and contain an entity which describes the
status of the request and refers to the new resource,and a Location
header (see Section 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都无法重定向到新资源。我弄错了生成正确的响应,或者Web浏览器不期望这种类型的响应,而是依赖服务器发送重定向响应?

解决方法

重定向post或post / redirect / get后,您的应用程序必须做到用户友好。

编辑。这是超越HTTP规范。如果我们在POST后简单地返回201,浏览器后退按钮的行为就会很糟糕。

请注意,Web服务请求(不响应浏览器)完全遵循标准,并且不会在发布后重定向

它工作这样。

>浏览器POSTS的数据。
>您的应用程序验证数据。如果它无效,你回复表单,以便他们可以解决它和POST。
>您的应用程序用重定向进行响应。
>浏览器获取重定向并执行GET。
>您的应用程序看到GET并作出响应。

现在 – 嘿presto! – 后退按钮工作。

原文链接:https://www.f2er.com/aspnet/254340.html

猜你在找的asp.Net相关文章