Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 无法使用angular正确设置自定义标题_.net_Angularjs_Http Headers_Cors - Fatal编程技术网

.net 无法使用angular正确设置自定义标题

.net 无法使用angular正确设置自定义标题,.net,angularjs,http-headers,cors,.net,Angularjs,Http Headers,Cors,我有一个在启用CORS的IIS上运行的.net WebAPI项目。这个项目有一个授权处理程序,它在每个请求中检查名为Token的头,现在它只检查它是否有字符串值 在使用angular的API调用中,我使用以下行添加头。我是从文件里拿的 $http.defaults.headers.common['Token']='C3POR2D2' 来自fiddler的API原始数据如下所示 OPTIONS http://localhost:81/api/Sample/GetSubordinateRolesFo

我有一个在启用CORS的IIS上运行的.net WebAPI项目。这个项目有一个授权处理程序,它在每个请求中检查名为Token的头,现在它只检查它是否有字符串值

在使用angular的API调用中,我使用以下行添加头。我是从文件里拿的

$http.defaults.headers.common['Token']='C3POR2D2'

来自fiddler的API原始数据如下所示

OPTIONS http://localhost:81/api/Sample/GetSubordinateRolesForUser/1 HTTP/1.1
Host: localhost:81
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)     Chrome/40.0.2214.45 Safari/537.36
Access-Control-Request-Headers: accept, token
Accept: */*
Referer: http://localhost/Account/Login
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
在这里,“令牌”显示为访问控制请求标题下的一个值。这导致我的授权处理程序返回403禁止,因为它期望头“Token”带有一些字符串值

以下是对原始数据的响应

HTTP/1.1 403 Forbidden
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Headers: Token
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE
Date: Wed, 07 Jan 2015 11:28:43 GMT
Content-Length: 0

我在这里遗漏了什么?

用这个。我也面临类似的问题

function getSettings(requestData) {
    return {
        url: requestData.url,
        dataType: requestData.dataType || "json",
        data: requestData.data || {},
        headers: requestData.headers || {
            "accept": "application/json; charset=utf-8",
            'Authorization': requestData.token
        },
        async: requestData.async || "false",
        cache: requestData.cache || "false",
        success: requestData.success || {},
        error: requestData.error || {},
        complete: requestData.complete || {},
        fail: requestData.fail || {}
    };
}
这样说吧

    var requestData = {
        url: 'your API end point',
        data: project,
        token: yourtoken
    };

    var settings = getSettings(requestData);
    settings.method = "POST"; //Your request
    return $http(settings);

并删除$http.defaults.headers.common['Token']='C3POR2D2'

上面的请求是可以的。浏览器首先使用OPTIONS方法检查是否允许浏览器访问具有给定标题的url。您的问题很可能是CORS问题。我已将问题编辑为包含响应标题,似乎CORS已启用。