Javascript Angularjs承诺即使成功也会进行错误回调

Javascript Angularjs承诺即使成功也会进行错误回调,javascript,angularjs,asp.net-web-api2,Javascript,Angularjs,Asp.net Web Api2,我试图在我的api上调用一个端点,我所做的每一个调用都会转到promise上的错误回调,而不是成功回调,即使请求实际上是成功的(返回200个有效json) 我在用ngResource打电话 资源: angular.module("ya").factory("Account", [ "$resource", function ($resource) { return $resource(apiUrl, {}, { "register": {

我试图在我的api上调用一个端点,我所做的每一个调用都会转到promise上的错误回调,而不是成功回调,即使请求实际上是成功的(返回200个有效json)

我在用ngResource打电话

资源:

angular.module("ya").factory("Account", [
    "$resource", function ($resource) {
        return $resource(apiUrl, {}, {
            "register": {
                method: "POST",
                params: {},
                url: apiUrl + "api/Account/Register"
            },
            "login": {
                method: "POST",
                params: {},
                url: apiUrl + "token",
                headers : { 'Content-Type': 'application/x-www-form-urlencoded' }
            }
        });
    }
在控制器中:

var creds = {
    email: register.email,
    password: register.password,
    confirmPassword: register.password
}
var r = Account.register(creds);
console.log(r);
r.$promise.then(function(result) {
    console.log(result);
}, function(result) {
    console.log("error");
    console.log(result);
});
console.log(r)
给出:

{
    "email": "bla6@bla.bla",
    "password": "password",
    "confirmPassword": "password"
}
正如所料

接下来控制台记录“error”,所以我知道它在error回调中。 记录的下一个对象是:

{
    "data": null,
    "status": -1,
    "config": {
        "method": "POST",
        "transformRequest": [null],
        "transformResponse": [null],
        "url": "http://localhost:57053/api/Account/Register",
        "data": {
            "email": "bla6@bla.bla",
            "password": "password",
            "confirmPassword": "password"
        },
        "headers": {
            "Accept": "application/json, text/plain, */*",
            "Content-Type": "application/json;charset=utf-8"
        }
    },
    "statusText": ""
}
这并没有告诉我出了什么问题

在firefox的network inspector中查看请求时,告诉我错误得到了200响应,并返回了以下json:

{
    "message": "User was registered successfully"
}
我不确定还有什么地方会出问题

这是我的配置,如果有任何帮助:

angular.module("ya", ["ngMaterial", "ui.router", "ngResource"])
    .config(["$mdThemingProvider", "$stateProvider", "$urlRouterProvider", "$locationProvider", "$sceDelegateProvider", 
    function ($mdThemingProvider, $stateProvider, $urlRouterProvider, $locationProvider, $sceDelegateProvider) {

        // Set application theme
        $mdThemingProvider.theme("default").dark();

        // Enable html5 mode
        $locationProvider.html5Mode(true);

        // Set default page
        $urlRouterProvider.otherwise("home");

        $stateProvider.state("home", {
            url: "/home",
            templateUrl: "templates/home.html",
            controller: "homeController", 
            controllerAs: "home"
        }).state("auth", {
            url: "/auth",
            templateUrl: "templates/authentication.html",
            controller: "authController",
            controllerAs: "auth"
        });

        $sceDelegateProvider.resourceUrlWhitelist(["self", "http://*.zlepper.dk/**", "http://localhost:*/**"]);
    }]);
请求转到:
http://localhost:57053/api/Account/Register
如预期的那样

编辑更多的测试表明,使用jQuery.post时也会出现同样的问题

关于这个错误没有更多的描述

在api上运行的代码(如果有帮助的话)

    // POST api/Account/Register
    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };

        IdentityResult result = await UserManager.CreateAsync(user, model.Password);

        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }

        return Ok(new Dictionary<string, string>() {{"message", "User was registered successfully"}});
    }
响应标题:

Cache-Control: no-cache
Content-Length: 53
Content-Type: application/json; charset=utf-8
Date: Wed, 30 Dec 2015 21:15:28 GMT
Expires: -1
Pragma: no-cache
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcUmFzbXVzXERvY3VtZW50c1xHaXRIdWJcY3VybHktZ2FyYmFuem9cY3VybHktZ2FyYmFuem9cYXBpXEFjY291bnRcUmVnaXN0ZXI=?=
access-control-allow-credentials: true
access-control-allow-origin: http://localhost:3000, *
选项请求:

OPTIONS /api/Account/Register HTTP/1.1
Host: localhost:57053
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Origin: http://localhost:3000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
选项响应:

HTTP/1.1 200 OK
Server: Microsoft-IIS/10.0
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcUmFzbXVzXERvY3VtZW50c1xHaXRIdWJcY3VybHktZ2FyYmFuem9cY3VybHktZ2FyYmFuem9cYXBpXEFjY291bnRcUmVnaXN0ZXI=?=
X-Powered-By: ASP.NET
Date: Thu, 31 Dec 2015 10:29:07 GMT
Content-Length: 0

看起来您实际上是在成功和错误函数中记录消息,如果您正在调试,这可能会让人困惑。您确定调用的是错误而不是成功回调吗?是的,但是成功回调不会发生,因为从那里不会记录消息(查看记录发生的行号)。同时考虑到调用所需的时间,在服务器上处理请求之前,它将响应方式记录为fast。您使用的是拦截器吗?你也可以考虑看看@丹,我不这么认为。
HTTP/1.1 200 OK
Server: Microsoft-IIS/10.0
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcUmFzbXVzXERvY3VtZW50c1xHaXRIdWJcY3VybHktZ2FyYmFuem9cY3VybHktZ2FyYmFuem9cYXBpXEFjY291bnRcUmVnaXN0ZXI=?=
X-Powered-By: ASP.NET
Date: Thu, 31 Dec 2015 10:29:07 GMT
Content-Length: 0