如何读取从angularjs一个POST API Location头? [英] How to read the Location header from a POST API in angularjs?
问题描述
我的岗位的方法是这样的:
My post method is something like this:
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);
}
}
在转角,我试图读取Location头,但至今我仍然不能够。
In angular, I am trying to read that Location header but so far I'm still not able to.
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));
};
我只是检查了每一个这些内容他们都没有位置标头。是否有一个角度的方式来访问该位置的头,让我知道我的新对象的网址是什么?
I am just checking out the contents of each of those and none has the location header. Is there a way in angular to access the location header so that i know the url of my new object?
推荐答案
根据文档中,标题
对象实际上是返回的头,像这样一个功能:
According to the documentation, the headers
object is actually a function that returns the header, like so:
.success(function(data, status, headers, config) {
alert( headers('Location') );
});
如果您希望所有标题的集合,你可以这样做:
If you want a collection of all headers, you can do this:
.success(function(data, status, headers, config) {
console.log( headers() );
});
注意:如果您的服务器设置的响应code 301
或 302
,你会的不可以能获得位置
头,因为它会自动,透明其次XMLHtt prequest对象
Note: If your server sets a response code of 301
or 302
, you will not be able to get the Location
header, as it will be automatically and transparently followed by the XMLHttpRequest object.
所以,一定要正确设置响应code。我在PHP(我不使用尽可能多的)测试这一点,忘记了设置位置
头自动设置响应code。为了测试这个,我不得不使用
So, make sure you are correctly setting the response code. I was testing this in PHP (which I don't use as much), and had forgotten that setting a Location
header automatically set the response code. To test this, I had to use:
header('Location: blah-blah', true, 200);
这是我的工作code样品,只需将其保存到定位test.php的
一个PHP的服务器上并运行它:
Here's my working code sample, just save it to location-test.php
on a PHP server and run it:
<?php
if(isset($_GET['q'])) {
header('Content-Type: application/json');
header('Location: user/1', true, 200);
echo json_encode(array('query' => $_GET['q']));
} else {
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.5/angular.min.js'></script>
<script type='text/javascript'>//<![CDATA[
angular.module('myApp', [])
.controller("myController", function($scope, $http) {
$scope.loc = "Loading...";
$http.get('location.php?q=hello')
.success(function (data, status, header, config) {
console.log(header());
$scope.loc = header('Location');
})
.error(function(data, status) {
console.log((data || 'Req Failed') + ': ' + status);
});
});
//]]></script>
</head>
<body>
<div ng-app="myApp" ng-controller="myController">
Location Header: {{loc}}
</div>
</body>
</html>
<?php
}
这篇关于如何读取从angularjs一个POST API Location头?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!