我有一个在localhost:10917上运行的角度JS应用程序。它使用$ http从位于localhost:21002的Web API /令牌端点请求承载令牌。 CORS已启用。我之前与之争过了问题,但现在我已经使用Postman了解它。
对于Postman,我回复了我的回复。使用Angular的$ http,我检查网络选项卡,我得到几乎相同的响应,但没有响应正文。即我的内容长度为457(与Postman响应相同),但没有预览或响应内容。
这是来自MVC控制器(位于localhost:10917)的C#代码,它接收包含令牌的响应。
var client = new HttpClient();
var post = new Dictionary<string, string>()
{
{ "grant_type", "password" },
{ "username", model.Username },
{ "password", model.Password }
};
var response = await client.PostAsync("http://localhost:21002/token", new FormUrlEncodedContent(post));
var content = await response.Content.ReadAsStringAsync();
var json = JObject.Parse(content);
该代码效果很好。这告诉我CORS正在运作。
Angular的$ http.post调用确实击中了我的WebAPI断点,似乎没有例外。网络选项卡甚至返回200.但没有响应正文,Angular将其作为我的.catch处理程序中的错误捕获。
angular.module('myApp').factory('authOAuthLoginService', ['appSettings', 'formEncodeService', '$http', '$q', 'currentUser', function (constants, formEncodeService, $http, $q, currentUser) {
var apiBase = constants.API_URI;
var login = function (username, password) {
var data = formEncodeService.encode({
grant_type: 'password',
username: username,
password: password
});
var config = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
return $http.post(apiBase + '/token', data, config).then(successHandler).catch(errorHandler);
};
var successHandler = function (response) {
debugger;
};
var errorHandler = function (response) {
debugger;
return $q.reject('Invalid login');
};
return {
login: login
}
}]);