有人可以向我解释是否有可能从AngularJS Promise中的Web API响应中获取标头?
我正在拨打以下电话:
return $http({
url: "http://localhost:19260/api/Authentication/Login/{credentials}",
method: "POST",
data: JSON.stringify(input),
dataType: "json"
}).then(function (response) {
if (response.status === 200) {
var jwt= response.headers('Authorization'); //Always null!!!!
auth = true;
}
else {
auth = false;
}
}, function (response) {
auth = false;
});
每次我尝试通过" response.headers(...)"值为null。为什么是这样?当我看到Fiddler中的响应时,我可以看到标题及其值。为什么AngularJS不能看到它?
这是CORS问题吗?客户端/服务器都在localhost上运行,但具有不同的端口。如果是这样,我的CORS实施有什么问题? (C#)
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class AuthenticationController : ApiController
{
[Route("api/Authentication/Login/{credentials}")]
[HttpPost]
public HttpResponseMessage Login([FromBody]CredentialContainer credentials)
{
var response = new HttpResponseMessage();
var jwt = GetJwtToken(credentials);
response.Headers.Add("Authorization", jwt);
response.StatusCode = HttpStatusCode.OK;
return response;
}
答案 0 :(得分:0)
您的web api服务和网络服务器配置中可能没有考虑的两点:
<强>首先:强>
由于非默认标头值未显示给客户端(即授权和任何其他自定义标头),因此您可以通过在Web服务器(IIS Web.config)中设置某些配置来公开它们。您可以在Web.config
中公开它们,例如:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Authorization" />
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" />
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
如果你的gana为所有api设置了这些配置,这是最好的方法,不需要在每个方法的顶部添加enable-cors
属性。另外在web.config中设置这些配置要容易得多,并且可以更好地工作(根据我的经验)。
<强>第二强> 您在ajax请求中未正确获取标头中的授权值。 请尝试使用此代码:
return $http({
url: "http://localhost:19260/api/Authentication/Login/{credentials}",
method: "POST",
data: JSON.stringify(input),
dataType: "json"
}).success(function (response, status, headers, config) {
if (response.status === 200) {
//Try this one
var jwt= headers('Authorization');
auth = true;
}
else {
auth = false;
}
}).error(function (response, status, headers, config) {
auth = false;
});
希望这可以帮助你兄弟。祝你好运。