Проблема
Я пытаюсь настроить политику CORS, чтобы мое приложение Angular могло вызывать веб-службу ASP.net.Я могу внести изменения в оба приложения.
Я получаю эту ошибку в Chrome:
Доступ к XMLHttpRequest по адресу "http://localhost:11434/myurl/mywebservice.asmx' из источника" http://localhost:4200'была заблокирована политикой CORS: Ответ на предполётный запрос не проходит проверку контроля доступа: значение заголовка «Access-Control-Allow-Credentials» в ответе равно «», которое должно быть «true», когда в режиме учетных данных запросаэто «включить».Режим учетных данных запросов, инициированных XMLHttpRequest, управляется атрибутом withCredentials.
Этот в Edge:
HTTP401: ОТКЛ - Запрошенный ресурс требует аутентификации пользователя.(XHR) ОПЦИИ - http://localhost:11434/myurl/mywebservice.asmx
Я могу успешно сделать запрос в Почтальоне.
Заголовки ответа
Access-Control-Allow-Origin → http://localhost:4200
Методы контроля доступа-разрешения → GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Contol-Allow-Credentials → true
Angular
Я использую перехватчик для добавления заголовков к каждому запросу.
AuthInterceptor
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(){}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
req = req.clone({
withCredentials: true
});
console.log(req);
return next.handle(req);
}
}
ApiService
public getData() {
const url: string = myBackendUrl;
const requestData = {
data: "my request data"
}
return this.http.post(url, requestData, {responseType: 'json'});
}
AppModule
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule
],
providers: [
ApiService,
{provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true}
],
bootstrap: [AppComponent]
})
ASP.Net
Использование web.config для настройки CORS.
web.config
<system.web>
<authentication mode="Windows"/>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://localhost:4200" />
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" />
<add name="Access-Contol-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
What I 'я попробовал
Я просмотрел следующие посты, чтобы попытаться решить эту проблему.
Заголовок 'Access-Control-Allow-Credentials' в ответе '', который должен быть 'trueЗаголовок «
Access-Control-Allow-Credentials» в ответе равен «», который должен быть «истинным»
значениеЗаголовок «Access-Control-Allow-Credentials» яn ответ «», который должен быть «истинным»
CORS: режим учетных данных «включать»
флаг учетных данных равен «true», но приложение Access-Control-Allow-Credentials
Windows Authentication и Angular 4
Спасибо за помощь.