AngularJS $ http POST收到200内容长度但没有内容

时间:2015-08-21 06:46:05

标签: angularjs asp.net-web-api cors

我有一个在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
    }
}]);

0 个答案:

没有答案
相关问题