我有Angularjs应用程序使用API连接到服务器,我使用令牌身份验证,当我使用Postman获取令牌时,它工作完美,但是当我使用Angulajs时,我使用相同的头和参数错误:400
当我使用Fiddler检查两个请求时,我发现Angularjs的请求缺少Access-Control-Allow-Origin: *
标题。
如何解决这个问题?
以下是用于获取令牌的服务:
AuthenticationApi.Login = function (loginData) {
//POST's Object
var data = "grant_type=password&username=" + loginData.userName + "&password=" + loginData.password;
var deferred = $q.defer();
//the data will be sent the data as string not JSON object.
$http.post('http://localhost:53194/Token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })
.then(function (response) {
console.log(response);
localStorageService.set('authorizationData',
{
token: response.access_token,
userName: loginData.userName
});
Authentication.isAuth = true;
Authentication.userName = loginData.userName;
console.log(Authentication);
deferred.resolve(response);
},
function (err, status) {
logout();
deferred.reject(err);
});
return deferred.promise;
};
对于API服务器,我做了CORS:
public void Configuration(IAppBuilder app)
{
ConfigureOAuth(app);
HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
答案 0 :(得分:3)
我发现了问题,我修复了它。 在API服务器中,我有这个代码:
var cors = new EnableCorsAttribute("*", "*", "*");
cors.PreflightMaxAge = 60;
config.EnableCors(cors);
问题在于PreflightMaxAge,我只是评论它......它有效!!!
如果问题没有解决,请尝试使用IE或FireFox,不要使用Chrome,因为它不支持CORS