我正在與AngularJS和ASP.Net的Web API一起工作。我在API中的TestController,因爲它得到的是這麼簡單:Angular接收String作爲數組?
public class TestController : ApiController {
[HttpGet]
public String Ping() {
return "Pong";
}
}
在Chrome中我可以去http://localhost/api/Test/Ping
和提琴手給出了一個簡單"Pong"
結果和瀏覽器顯示:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Pong</string>
早在角JS,我建立一個工廠調用ping功能:
app.factory('API', ['$resource', function ($resource) {
return {
Ping: function() {
var result = $resource('api/Test/Ping', {}, { get: { method: 'GET' }, isArray: false });
return result.get();
}
};
}]);
而一個超級簡單的控制:
app.controller('MyCtrl', [ '$scope', 'API', function ($scope, API) {
$scope.CallTest = function() {
API.Ping().$promise.then(function (response) {
alert(response);
});
}
}]);
當我點擊CallTest
被綁定的按鈕時,它會進行調用,API會像返回Pong一樣返回對象,但返回對象並不是我所期望的。響應是一個奇怪的物體:
{
0: """,
1: "P",
2: "o",
3: "n",
4: "g",
5: """,
$promise: {...},
$resolved: true
}
我沒有收到任何錯誤和語法上的一切工作正常。然而,我希望response
將是一個字符串,特別是因爲我在我的API
工廠中將isArray
設置爲false。我相信角必須返回一個「Resource」,其上有一個$promise
和$resolved
,所以我現在明白它可能不會那樣工作。除了在WebAPI中使用一個簡單的包裝器來返回一個字符串作爲Model中的參數之外,是否有可用的客戶端選項,以便response
可以包含一個普通字符串而不是此僞數組?喜歡也許response.data
什麼的?
編輯:當我從瀏覽器請求,Accept
頭包含:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
其中在XML結果上述結果。當角請求相同的URL,則Accept
頭包含:
application/json, text/plain, */*
這導致簡單地被"Pong"
爲什麼你不只是在你的web api中使用JSON.net並且返回json或者JObject到angular? – Owen 2014-09-10 17:17:05
@Owen我可以用JSON,XML,SOAP,任何東西包裝它,但是一個簡單的字符串應該是最容易解析的東西。 – 2014-09-10 17:21:34
從我發現的,將文字轉儲到$資源中會將文字轉換爲字符串數組。將值傳遞給$ resource以用作參數時,發生這種情況。如果該值不是分配的變量,則該字符串被分解爲數組。用文字的值賦值變量是解決這個問題的最快方法。從我的Web API獲取數據,我只通過JObjects。 – Owen 2014-09-10 18:39:42