我正在使用AppGyver和AngularJS构建移动应用程序。
在登录页面,我使用以下命令向我的Web API服务器发出POST请求:
Restangular.all("token")
.post({
grant_type: "password",
username:username,
password:password
});
我的RESTangular以这种方式设置:
appServerModule.config(function(RestangularProvider) {
RestangularProvider.setBaseUrl('http://192.168.1.58/AppServer/api');
RestangularProvider.setErrorInterceptor(function(response) {
steroids.logger.log("RestangularProvider error:" + JSON.stringify(response));
});
});
当我执行POST请求时,我在记录器中得到以下输出:
"RestangularProvider error:{"data":"","status":0,"config":{"method":"POST","transformRequest":[null],"transformResponse":[null],"headers":{"Accept":"application/json, text/plain, */*","Content-Type":"application/json;charset=utf-8"},"url":"http://192.168.1.58/AppServer/api/token","data":{"grant_type":"password","username":"AppServer","password":"AppServer"}},"statusText":""}"
如您所见,错误消息不包含任何有用信息,因此我不知道出了什么问题。 我可以在浏览器中使用Postman执行POST,并且Web API设置为允许CORS。
我在这里缺少什么? 如何获得有关幕后发生的更多信息?
请注意我在移动设备上执行此操作。
额外信息: GET请求提供了预期的Restangular错误:
"RestangularProvider error:{"data":{"Message":"Authorization has been denied for this request."},"status":401,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"headers":{"Accept":"application/json, text/plain, */*"},"url":"http://192.168.1.58/AppServer/api/chapters"},"statusText":"Unauthorized"}"
答案 0 :(得分:1)
OWIN OAuth 2.0授权服务器不支持令牌请求的JSON。
在从javascript客户端发出请求时,您需要使用x-www-form-urlencoded而不是JSON:
Restangular.all("token")
.post("grant_type=password&username=YourUsername&password=YourPassword", undefined, {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
});