У меня есть резервная копия .net, которая отлично работает. Но когда я собираюсь соединить его с угловым фронтом, у меня возникла эта проблема. Backend все запросы являются почтовыми запросами. Необходимо передать ApiKey в теле каждого запроса. С почтальоном работает отлично.
Ошибка:
Почтальон:
resetService.ts
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { map, catchError, tap } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class RestService {
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
apiKey = {
'ApiKey': 'MTIzNDU2Nrg='
};
constructor(private http: HttpClient) {
console.info(this.httpOptions);
}
getProductCategories(): Observable<any> {
return this.http.post<any>('http://restUrl:8029/ShoppingCartApi/GetProductList', this.apiKey, this.httpOptions);
}
}
мыло.компонент.ц
import { Component, OnInit } from '@angular/core';
import { RestService } from 'src/app/services/rest.service';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'app-soap',
templateUrl: './soap.component.html',
styleUrls: ['./soap.component.css']
})
export class SoapComponent implements OnInit {
products: any = [];
constructor(public rest: RestService, private route: ActivatedRoute, private router: Router) { }
ngOnInit() {
this.getProducts();
}
getProducts() {
this.products = [];
this.rest.getProductCategories().subscribe((data) => {
console.info(data);
this.products = data;
});
}
}
Любая помощь приветствуется....
Вам нужно включить CORS или, возможно, использовать прокси из angular для использования вашего бэкэнда, вы просто добавляете файл, чтобы указать, как использовать прокси в режиме DEV. Использование прокси-сервера Angular-cli
Спасибо, это не оригинальный ключ.. Но я не могу изменить серверную часть. Также в шапке представлен CORS.
если вы не можете изменить материал сервера, вы, вероятно, не сможете это сделать, если только вы не сможете каким-то образом обмануть свой сервер, заставив его думать, что источник тот же
ок спасибо попробую....
Я ошибаюсь или проблема CORS не должна возникать в запросе OPTIONS? содержит ли запрос на POSTMAN порт 8029?
@NguyenPhongThien Проблемы с CORS будут возникать по любому запросу, если CORS не включен и исходный URL-адрес не соответствует серверу.





Решением может быть HttpInterceptor, как описано здесь: https://medium.com/@ryanchenkie_40935/angular-authentication-using-the-http-client-and-http-interceptors-2f9d1540eb8
Извините, я понятия не имею, как с этим работать в моем случае,
Судя по почтальону, это может быть связано с тем, что ваш API принимает необработанный контент для передачи apikey. Из angular вы передаете его как объект json.
Пожалуйста, попробуйте передать его как строку, чтобы увидеть, как это работает.
Настройки CORS также необходимо проверить на бэкэнд-API.
вы можете создать файл proxy.conf.json внутри корневой папки и добавить в него этот контент.
{
"/ShoppingCartApi/*" : {
"target" : "http://resturl:8029",
"secure" : "false",
"logLevel" : "debug",
"changeOrigin" : true
}
}
и обслуживать его с помощью ng serve --proxy-config proxy.config.json
Судя по всему, вам нужно включить
CORSна вашем сервере, а также не размещать свои закрытые ключи API в Интернете.