javascript - WebApi-metode med enkelt værdi og AngularJs $http json-håndtering


Jeg støder på et problem, og jeg er løbet tør for idéer, jeg har brug for vejledning mod oprindelsen og/eller løsningen:

Serverside

Jeg tilføjede den standard Microsoft Web Api Controller klasse "ValuesController", som ser sådan ud:

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

Kundeside

I min AngularJS Controller-funktion har jeg en simpel get

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

HTML'en ser sådan ud:

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

Det mærkelige (problemet) er, at jeg får: "value" i mit input i stedet for bare value (uden anførselstegn). For at undgå misforståelser får jeg dette:

I stedet for dette:

Og selvfølgelig er spørgsmålene: hvorfor?? og hvordan fikser jeg det*?

*forhåbentlig vil svaret ikke være at returnere et objekt i stedet for en simpel streng :)

Svar #1

Jeg har indtrykket af, at dette skyldes sikkerhedssårbarheder i JSON-formatet. I dokumentationen af $http-tjenesten er der et afsnit kaldet JSON-sårbarhedsbeskyttelse, som foreslår, at Angular tager nogle forholdsregler for at undgå et angreb.

De anbefaler læsning af følgende artikel: Anatomy of a Subtle JSON Vulnerability, som så vidt jeg kan se, dykker ned i en sag, der ligner din.

Bundlinjen er, jeg tror, du bliver nødt til at returnere et fuldt JSON-objekt og ikke bare en streng. Et alternativ er at sørge for, at du får et JSON-objekt, ved at gøre

$scope.value = JSON.parse(value)

Svar #2

Den foretrukne (Angular-leverede løsning) er

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