我的帖子方法是这样的:
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?
答案 0 :(得分:19)
According to the documentation,headers
对象实际上是一个返回标题的函数,如下所示:
.success(function(data, status, headers, config) {
alert( headers('Location') );
});
如果您想要所有标题的集合,可以执行以下操作:
.success(function(data, status, headers, config) {
console.log( headers() );
});
注意:如果您的服务器设置的响应代码为301
或302
,您 无法获得{{1}标题,因为它将自动且透明地跟随XMLHttpRequest对象。
因此,请确保您正确设置了响应代码。我在PHP中测试它(我没有那么多使用),并且忘记了设置Location
标头会自动设置响应代码。为了测试这个,我不得不使用:
Location
这是我的工作代码示例,只需将其保存到PHP服务器上的header('Location: blah-blah', true, 200);
并运行它:
location-test.php
答案 1 :(得分:1)
由于{http {1}}已在$ http中弃用且已替换为solved,因此对此答案的更新是直接在注入承诺的响应中调用.success()
。
header