Angularjs:为什么添加授权 header 会导致 -1 状态响应?

Angularjs: Why does adding an authorization header cause a -1 status response?

我有一个 pre-existing angular 代码可以从 API 获取数据。我正在尝试向请求添加身份验证令牌。

首先我尝试了一个简单的例子

.factory('getDep', [
        '$resource', function($resource) {
            return $resource('/ContactsDatabaseAPI/deps/:id', { id: '@id' }, {
                query: {
                    method: 'GET',
                    isArray: false,
                    headers: {
                        'Authorization': 'Bearer ' + token
                    }
                },
                create: {
                    method: 'POST'
                },
                update: {
                    method: 'PUT'
                },
                remove: {
                    method: 'DELETE'
                }
            });
        }

当触发 GET 调用并在 Chrome 中执行 F12 时,我收到一条错误消息:

angular.js:11821 OPTIONS http://localhost:56057/ContactsDatabaseAPI/deps net::ERR_CONNECTION_RESET

-1 的 return 状态,并且没有调用到服务器端的迹象。

没有 headers 行,它工作正常。

如果我在 Postman 中使用相同的授权值在 header 中尝试 GET 调用,这也可以正常工作。

我也尝试在 httpInterceptor 中添加 header 并得到相同的结果:

config.headers = config.headers || {};
config.headers.Authorization = 'Bearer ' + authData.token;

我尝试过的其他事情:

我正在使用 angular 1.5.6

试试这个(在控制器中):

$http.defaults.headers.common.Authorization = 'Bearer ' + 代币;

我已经解决了我的问题,感谢@Mourad-Idrissi 为我指明了正确的方向。

它之前起作用的原因是在 API 是 运行 之前没有 Pre-Flight 检查。当我添加 header 时,这改变了客户端与 API 通信的方式。现在有一个对 API 的 OPTIONS 调用导致了错误。由于域不同,这让我进入了 CORS 的世界。

通过在我的后端 Web API 中将以下内容添加到我的 Application_BeginRequest() 方法中,Pre-flight 现在通过并且我的应用程序继续。

if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
    HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization");
    HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
    HttpContext.Current.Response.End();
}