我有一个基于.NET Core的REST服务作为后端,而Angular 9作为前端。功能和交互一直都很好。今天突然之间,在项目中没有任何相关更改,它停止了工作。每次使用登录功能时,都会出现异常:
从原始本地主机到XMLHttpRequest的访问已被阻止 通过CORS策略:在上不存在“ Access-Control-Allow-Origin”标头 所请求的资源。
我的后端允许使用CORS:
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
Angular的登录功能是:
@Injectable()
export class AuthService {
login(credentials) {
sessionStorage.removeItem('token');
this.isBusy = true;
this.http.post<any>(this.loginUrl, credentials, { observe: 'response' }).subscribe(res => {
this.authenticate(res.body);
}, error => {
sessionStorage.removeItem('token');
this.router.navigate(['/logout'])
})
}
authenticate(res) {
sessionStorage.setItem('token', res);
this.router.navigate(['/']);
}
}
我不明白,如果几个月正常运行,为什么突然停止工作。请指教。
ASP.NET Core中中间件的顺序可能是一个问题。 Cors应该在添加任何控制器或MVC之前。
// Correctly applies Cors
services.AddCors();
services.AddControllers();
// Doesn't apply Cors
services.AddControllers();
services.AddCors();
您的Configure(IApplicationBuilder, IWebHostEnvironment)
通话中也是如此。我通常将app.UseCors()
作为该方法的第一行。