当前位置: 首页 > 面试题库 >

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

凌经赋
2023-03-14
问题内容

我的发布方法是这样的:

    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标头,但到目前为止,我仍然无法读取。

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));
         };

我只是检查每个内容,而没有位置标头。有没有一种方法可以访问位置标头,以便我知道新对象的网址?


问题答案:

根据文档,headers对象实际上是一个返回标头的函数,如下所示:

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

如果要收集所有标头,则可以执行以下操作:

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

注意: 如果服务器将响应代码设置为301302,则将 无法
获取Location标头,因为标头将自动透明地跟在XMLHttpRequest对象之后。

因此,请确保您正确设置了响应代码。我在PHP中对此进行了测试(我并没有使用太多),却忘记了设置Location标头会自动设置响应代码。为了测试这一点,我不得不使用:

header('Location: blah-blah', true, 200);

这是我的工作代码示例,只需将其保存到location-test.phpPHP服务器上并运行即可:

<?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

}


 类似资料:
  • 问题内容: 我正在使用RestTemplate.postForObject将信息发布到Web服务。除了结果字符串,我还需要响应头中的信息。有什么办法可以做到这一点? 问题答案: 好吧,我终于明白了。交换方法正是我所需要的。它返回包含完整标头的HttpEntity。

  • 问题内容: 我之所以这么问,是因为有几次,我尝试一起使用该命令,并在调用我的项目的脚本/样式/图像时遇到很多错误。我想可能是我做错了什么,但是您应该遵循某种文件夹结构,以免遇到这些错误吗?还是有一种我不太了解的作品的特定方式? 最近,我想我会在一个非常小的应用程序上尝试。它实际上是一个静态网站,但是我想利用Angular的路由来确保所有页面都可以立即加载。所以我的结构是这样的: 所以我知道这个文件

  • 问题内容: 是否可以在AngularJS中读取文件?我想将文件放入HTML5画布进行裁剪。 我在考虑使用指令吗?这是我要放入指令中的javascript代码: 问题答案: 是的,指令是正确的方法,但看起来有些不同: 工作示例:http : //plnkr.co/edit/y5n16v?p=preview 感谢lalalalalmbda提供此链接。

  • 如何在AngularJS中读取此流?我尝试使用以下代码在新窗口中将其作为PDF文件打开: 但我无法看到打开的窗口中的内容。

  • 问题内容: 我有一个动态生成的页面,我想在其中使用静态JavaScript,并向其传递JSON字符串作为参数。我已经看到Google使用了这种方法。 但是,我应该如何从JavaScript中读取JSON字符串? 在此JavaScript中,我想使用HTML文档中的JSON参数。我不知道是否最好使用jQuery。 问题答案: 我将脚本声明更改为: 注释类型和ID字段。之后 在所有浏览器中都可以正常工

  • 我有一个API,访问该API的人必须传递一个授权令牌,所以我的问题是如何从头中获取该认证令牌?