【问题标题】:Header location for ajax call in response响应中 ajax 调用的标头位置
【发布时间】:2014-07-31 10:16:49
【问题描述】:

我们的项目由客户端(knokout)和服务器端(ASP.Net MVC 和 WebAPI)两部分组成。

客户端经常调用 Web API 来获取/创建/更新服务器上的数据。 我们按以下方式处理(更新示例)

public HttpResponseMessage UpdateEntity(EntityWE entity)
{

    HttpResponseMessage response;

    try
    {
        var updateEntity = this.someBl.UpdateEntity(entity);

        response = Request.CreateResponse(HttpStatusCode.Created, updateEntity);
        response.Headers.Location = new Uri(Url.Link(WebApiRoutNames.CustomApi, new { id = updatedEntity.PageId }));

    }
    catch (Exception ex)
    {
        Logger.Error(ex);
        response = Request.CreateResponse(HttpStatusCode.InternalServerError);
    }

    return response;
}

问题是为什么我们需要发送标头位置来响应 ajax 调用? response = Request.CreateResponse(HttpStatusCode.Created, updateEntity)不够吗?;

我们不使用任何重定向来响应 ajax 调用

附:所有写这篇文章的人都在很远的地方......我无法理解它被添加到所有 Web API 控制器的原因

提前感谢您的澄清。

【问题讨论】:

    标签: asp.net ajax asp.net-web-api


    【解决方案1】:

    据我了解,您只是想澄清一下为什么将 Location 标头添加到 Ajax 响应中。

    通常情况下,位置标头用于重定向响应 (http://en.wikipedia.org/wiki/HTTP_location),但在我看来,在这种情况下,后端可能已经很旧了?也许一开始客户端没有 Ajax,并且 Location 用于将浏览器重定向到新更新/添加的实体。

    这可能是前端/后端团队拆分的经典案例。后端不太了解前端的地方,反之亦然。后端总是添加位置,因为这是以前构建 Web 应用程序的方式,重定向到新资源。因此,无论是旧习惯还是文档,后端团队都认为他们仍然需要 Location 标头,因为他们从来不知道它在到达客户端时做了什么。我并不是说这里就是这种情况,只是根据经验谈谈:-)

    您完全正确,但 Ajax 调用不需要它,除非 ajax 响应抓取该标头并出于某种奇怪的原因使用它!

    【讨论】:

    • 在客户端我们不使用位置标头,所以我想也许 asp.net 代表我们用它做一些事情......无论如何感谢您的澄清
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多