使用:Angular 7,.net核心,Web API
我最近将我的应用程序更改为使用Windows身份验证,现在我曾经工作的请求对任何发布和放置(获取作品)都失败了。我得到
Access to XMLHttpRequest at 'https://localhost:44372/api/tasks' from
origin 'http://localhost:4200' has been blocked by CORS policy: Response
to preflight request doesn't pass access control check: No 'Access-
Control-Allow-Origin' header is present on the requested resource.
我必须添加一个角度拦截器才能使get请求与启用Windows身份验证一起工作。
@Injectable()
export class CredentialsInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
request = request.clone({
withCredentials: true
});
return next.handle(request);
}
}
我的startup.cs正在添加这样的CORS(我必须设置setIsOriginAllowed才能使get请求起作用)
services.AddCors(o => o.AddPolicy("AllowAll", builder =>
{
builder.SetIsOriginAllowed((host) => true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
}));
...//Configure
app.UseCors("AllowAll");
app.UseMvc(routes =>
{
...
我也尝试过指定来源或方法 .WithOrigins(“ https://localhost:4200”,“ http://localhost:4200”) 要么 .AllowAnyOrigin()
以及在拦截器中手动添加标头
intercept(request: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
request = request.clone({
withCredentials: true
});
request.headers.append('Access-Control-Allow-Origin', 'http://localhost:4200');
return next.handle(request);
我想念什么?我已经搜寻了几个小时。我了解如果未指定允许的来源,则会阻止CORS。其他StackOverflows表示它不能是客户端,但我认为客户端请求未发送“ Access-Control-Allow-Origin”标头。如何测试以确保已设置标头?为什么要上班而不提出要求?
答案 0 :(得分:0)
所有其他帖子都指出了问题所在,但没有给出解决方案。放置OPTIONS请求时未放置授权头。我可以发出GET请求,因为会传递Windows身份验证标头,但是当我发出PUT请求时,必须首先发送不包含标头的OPTIONS。
为了使服务器允许使用OPTIONS,我必须允许对OPTIONS进行匿名身份验证。我是在项目属性->调试部分中选择它的。
答案 1 :(得分:-1)
服务器必须在响应中设置标头。在没有用的客户端请求中设置它。尝试使用邮递员之类的工具向api端点发出请求,并查看服务器在响应中设置了哪些标头。
服务器端代码中最有可能导致此问题的问题。