【问题标题】:WebApi Method with single value and AngularJs $http json handling具有单值和 AngularJs $http json 处理的 WebApi 方法
【发布时间】:2014-02-28 18:53:30
【问题描述】:

我遇到了一个问题,我没有想法,我需要一些关于起源和/或解决方案的指导:

服务器端

我添加了标准的 Microsoft Web Api Controller 类“ValuesController”,如下所示:

public class ValuesController : ApiController
{              
   public string Get(int id){ return "value"; }
   ...

客户端

在我的 AngularJS 控制器函数中,我有一个简单的 get

$http({method:'GET',url: '/api/values/1'}).success(function(data){
        $scope.value  =data;
    })

HTML 如下所示:

  <input type="text" ng-model="value" />

奇怪的事情(问题)是我在输入中得到:“值”,而不仅仅是值(没有引号)。 为了避免误解,我得到这个:

而不是这个:

当然,问题是:为什么?以及如何解决*?

*希望答案不会返回一个对象而不是一个简单的字符串:)

【问题讨论】:

标签: javascript json angularjs asp.net-web-api


【解决方案1】:

我的印象是,这是由于 JSON 格式的安全漏洞造成的。在 $http 服务的文档中,有一个名为 JSON Vulnerability Protection 的部分表明 Angular 采取了一些预防措施来避免攻击。

他们推荐阅读以下文章:Anatomy of a Subtle JSON Vulnerability,据我所知,该文章深入研究了与您类似的案例。

底线,我认为你将不得不返回一个完整的 JSON 对象,而不仅仅是一个字符串。另一种方法是确保您得到一个 JSON 对象,方法是

$scope.value = JSON.parse(value)

【讨论】:

  • JSON.parse() 为我解决了类似的问题。来自服务器的响应似乎很好,但它在客户端上不起作用,直到我添加了对 JSON.parse() 的调用。
【解决方案2】:

首选(Angular 提供的解决方案)是

$scope.value = angular.fromJson(data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2016-08-14
    相关资源
    最近更新 更多