2015-12-21 32 views
0

我送一个JSON HTTP响应,如网络API如下所示,JSON数据存在于response.Content如何在角js中从HttpResponse中提取JSON数据?

HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 
      var LoginDetailsResponse = new LoginDetails { LoginToken = "Token" , LoginDescription = "Desc" }; 
      response.Content = 
       new ObjectContent<LoginDetails>(LoginDetailsResponse, 
          new JsonMediaTypeFormatter(), new MediaTypeWithQualityHeaderValue("application/json")); 
      return response; 

而这是发送作为JSON格式的对象是:

public class LoginDetails 
    { 
     public string LoginToken { get; set; } 
     public string LoginDescription { get; set; } 
    } 

而下面的是,我用于发送的请求,并提取内容JSON角js代码:

var Submit = function() { 
 

 
    var httpResponseRef = $http({ 
 
    url: 'http://wycvwetebx056.com:81/', 
 
    method: "GET" 
 
    }); 
 

 
    httpResponseRef.then(successloginCallBackRef, errorloginCallBackRef, notifyCallbackRef); 
 

 

 
}; 
 

 
// when it is a success it call's successloginCallBackRef function 
 

 
var successloginCallBackRef = function(httpLoginResponseMessage) { 
 

 
    var status = httpLoginResponseMessage.status; 
 
    var response = httpLoginResponseMessage.data; // returns everything as a string type. 
 
};

但是httpLoginResponseMessage.data没有像预期的那样返回数据,它似乎包含以下内容。

"StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.JsonContent[LoginDetails.LoginDetailsResponse], Headers: 
{ 
    Content-Type: application/json; charset=utf-8 
}" 

我可以看到,我有json的内容,但我不知道如何提取,而使用角js。

+1

你尝试['JSON.parse'(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)= – adeneo

+0

好吧,也许你的服务器发送它由于某种原因双重编码?如果响应头文件显示的是JSON,则$ http会将其视为这样。否则,您可以使用JSON.parse解析数据,如第一条评论中所述。如果您使用Chrome开发工具,则可以查看“网络”选项卡中返回的响应,以查看它是否是字符串或它是否正确解析。 – SoluableNonagon

+0

@adeneo:伙计们,是的,我也尝试过JSON.parse,但它似乎在抛出'Unexpected token S'错误。我检查了一下,发现如果没有引号,它会抛出该错误。但我并没有发现在开始时明确附加引号的必要性。 – Abhishek

回答

1

为什么不依靠内置的方法来处理内容协商。

public HttpResponseMessage Login() 
{ 
    var s = new LoginDetails { LoginToken = "read from somehere"}; 
    return Request.CreateResponse(HttpStatusCode.OK, s);    
} 

这将JSON结构返回到您的角度HTTP调用。您可以在成功回调中读取数据属性,它将成为您可以访问LoginToken属性的js对象。

var successloginCallBackRef = function(response) { 

    var status = response.status; 
    var d = response.data; 
    console.log(d.LoginToken); 
}; 
+0

我尝试在VS2012中输入Request.CreateResponse,但我不断收到红色的波浪线。尝试自动解决它,但也没有运气。是否有任何我应该继承的dll或命名空间,以使此代码工作? – Abhishek

+0

它在System.Net.Http命名空间中定义。你使用哪种版本的网络框架? – Shyju

+0

是的,我使用了相同的命名空间,但我想它是因为我在Web API中使用Controller而不是APIController。它现在有效。谢谢!但我希望它也是JSON格式。我的意思是回复数据。 – Abhishek