Я разрабатываю веб-приложение с использованием Angular. Backend API разработан с использованием PHP-фреймворка Laravel. Я включил доступ CORS, создав промежуточное ПО в Laravel.
Это промежуточное ПО Laravel
class Cors
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Headers','X-Requested-With,content-type')
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
}
Я могу успешно сделать такой запрос GET.
this.http.get<IEvent[]>(this.globals.API_ENDPOINT + "event/list?email = " + email).subscribe(data=> {
//do something with the data
});
Вышеупомянутый запрос GET работает нормально. Но проблема в том, чтобы сделать POST-запрос с некоторыми параметрами.
Я отправляю запрос POST вот так.
var formData = {
name: "My name"
}
this.http.post<ISimpleForm>(this.globals.API_ENDPOINT + "event/post", formData).subscribe(data=>{
})
Как видите, переменная formData - это объект. Когда я отправляю запрос, у меня в консоли появляется эта ошибка.
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
Я пробовал много решений в Интернете. Например, передача заголовков с «Content-Type» с «application / json» и так далее. Ни один из них не помог. Я уже решил проблему CORS и на стороне сервера.
Но запрос работает, когда я отправляю тело в виде строки, подобной этой
this.http.post<ISimpleForm>(this.globals.API_ENDPOINT + "event/post", formData).subscribe(data=>{
})
Ошибка CORS исчезла, когда я натянул тело. Но проблема в том, что когда я регистрирую данные запроса на стороне сервера с помощью $ _POST, в запрос ничего не передается. Итак, тело пусто.
Итак, как я могу сделать почтовый запрос с некоторыми параметрами запроса, используя HttpClient в Angular? Что не так с моим кодом и как это исправить?
похоже (в нерабочей версии) сервер некорректно отвечает на предварительный запрос OPTIONS, который ваш браузер выполнит перед как фактический запрос POST.
предлагая это промежуточное ПО с установленным github.com/barryvdh/laravel-cors
используйте прокси в angular, проверьте этот пост stackoverflow.com/q/37172928/3898339
Пробовал, все равно не работает @ Deep3015
Привет, @vishalpardeshi, я использую промежуточное ПО CORS в laravel. Я считаю, что мои работы, потому что, когда я сделал запрос на получение, я получал ошибку cors. Я решил это, добавив промежуточное ПО CORS.
Привет, @Wai Yan Hein, но у меня была такая же ошибка. это промежуточное ПО работает для методов, а не для предпечатного заголовка. цыпленок это stackoverflow.com/questions/34748981/…
@vishalpardeshi. Ты прав. Промежуточное ПО, которое я использовал ранее, не работало должным образом. Когда я использовал ваш, теперь все работают. Огромное спасибо.






Некоторое время назад я получил ту же ошибку. это промежуточное ПО работает для методов, а не для предпечатного заголовка. Отметьте это Laravel 5.2 CORS, GET не работает с ОПЦИЯМИ предполетной подготовки
Предлагаем использовать это в вашем проекте github.com/barryvdh/laravel-cors вместо промежуточного программного обеспечения.
связанные: stackoverflow.com/questions/5750696/…