如何从angularjs中的POST API读取Location标头?

时间:2013-07-27 20:14:32

标签: post angularjs http-headers

我的帖子方法是这样的:

    public HttpResponseMessage AddUser(User user)
    {
        UserManager userManager = new UserManager();
        try
        {
            userManager.Create(user);

            var savedUser = userManager.FindUserByClientId(user.ClientId);
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, user);
            response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = savedUser.Id }));
            return response;
        }
        catch(Exception ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message);
        }

    }

在角度方面,我试图阅读该位置标题,但到目前为止,我仍然无法做到。

return $http.post('http://localhost:30028/api/values/adduser', user)
        .success(function (data, status, headers, config) {
            alert(angular.toJson(data));
            alert(angular.toJson(status));
            alert(angular.toJson(headers));
            alert(angular.toJson(config));
         };

我只是检查每个内容,没有没有位置标题。是否有角度访问位置标题,以便我知道我的新对象的URL?

2 个答案:

答案 0 :(得分:19)

According to the documentationheaders对象实际上是一个返回标题的函数,如下所示:

.success(function(data, status, headers, config) {
    alert( headers('Location') );
});

如果您想要所有标题的集合,可以执行以下操作:

.success(function(data, status, headers, config) {
    console.log( headers() );
});

注意:如果您的服务器设置的响应代码为301302,您 无法获得{{1}标题,因为它将自动且透明地跟随XMLHttpRequest对象。

因此,请确保您正确设置了响应代码。我在PHP中测试它(我没有那么多使用),并且忘记了设置Location标头会自动设置响应代码。为了测试这个,我不得不使用:

Location

这是我的工作代码示例,只需将其保存到PHP服务器上的header('Location: blah-blah', true, 200); 并运行它:

location-test.php

答案 1 :(得分:1)

由于{http {1}}已在$ http中弃用且已替换为solved,因此对此答案的更新是直接在注入承诺的响应中调用.success()

header