Cor*_*urn 6 asp.net-web-api angularjs
我正在使用AngularJS和ASP.Net的Web API协同工作.我在API中有一个TestController,它很简单:
public class TestController : ApiController {
[HttpGet]
public String Ping() {
return "Pong";
}
}
Run Code Online (Sandbox Code Playgroud)
在Chrome中我可以去http://localhost/api/Test/Ping
和fiddler显示一个简单的"Pong"
结果,浏览器显示:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Pong</string>
Run Code Online (Sandbox Code Playgroud)
回到Angular 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();
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
一个超级简单的控制器:
app.controller('MyCtrl', [ '$scope', 'API', function ($scope, API) {
$scope.CallTest = function () {
API.Ping().$promise.then(function (response) {
alert(response);
});
}
}]);
Run Code Online (Sandbox Code Playgroud)
当我单击CallTest
绑定的按钮时,它会进行调用,API会返回Pong,但返回对象并不完全符合我的预期.回应是一个奇怪的对象:
{
0: """,
1: "P",
2: "o",
3: "n",
4: "g",
5: """,
$promise: {...},
$resolved: true
}
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误,语法上的一切都运行正常.然而,我希望这response
将是一个字符串,特别是因为我isArray
在我的API
工厂设置为假.我相信angular必须返回一个"资源",它有一个$promise
和$resolved
它上面,所以我现在明白它可能不会那样工作.除了在WebAPI中创建一个简单的包装器以返回一个字符串作为模型上的参数之外,是否有可用的客户端选项,以便response
可以包含普通字符串而不是此伪数组?喜欢或许response.data
什么?
编辑:当我从浏览器请求时,Accept
标题包含:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)
这导致上面的XML结果.当Angular请求相同的URL时,Accept
标头包含:
application/json, text/plain, */*
Run Code Online (Sandbox Code Playgroud)
这导致了响应的内容 "Pong"
gka*_*pak 10
如文档中所述,$resource
是一个工厂,它创建一个资源对象,使您可以与REST服务器端数据源进行交互.
在您的情况下,您不会尝试与正确的RESTful数据源进行交互,因此行为似乎很奇怪.
在您拥有正确的RESTful数据源并且只想要访问API端点并检索简单响应(例如字符串)之前,您应该使用该$http
服务:
$http.get('api/Test/Ping').success(function (data) {...})...
Run Code Online (Sandbox Code Playgroud)
例如:
app.factory('API', ['$http', function ($http) {
return {
Ping: function () {
return $http.get('api/Test/Ping');
}
};
}]);
app.controller('MyCtrl', ['$scope', 'API', function ($scope, API) {
$scope.CallTest = function () {
API.Ping().success(function (data) {
alert(data);
});
};
}]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4733 次 |
最近记录: |