Попадание в конечную точку контроллера является ожидаемым.
Ограничения CORS применяются на стороне браузера и никогда не применяются на стороне сервера. Это также верно для упомянутого вами промежуточного программного обеспечения CORS ASP. NET Core. Ответственность промежуточного программного обеспечения заключается исключительно в том, чтобы дать браузеру указание не отправлять запрещенные запросы, если это возможно. Однако некоторые «простые» запросы (например, очень простые GET и POST) всегда будут поступать на сервер - это то, что вы заметили.
CORS сначала может показаться сложным, но как и все в жизни, как только вы заглянете за занавес, все это обретет смысл.
Совместное использование ресурсов между источниками (CORS) - это механизм, который использует дополнительные заголовки HTTP, чтобы сообщить браузерам предоставить веб-приложению работает в одном источнике, доступ к выбранным ресурсам из другого источника. Веб-приложение выполняет HTTP-запрос с несколькими источниками, когда оно запрашивает ресурс, который имеет другое происхождение (домен, протокол или порт) от его собственного.
https://developer.mozilla.org/docs/Web/HTTP/CORS
Для простых запросов (например, большинства HEAD/GET
, но также некоторых простых POST
, см. https://developer.mozilla.org/docs/Web/HTTP/CORS#Simple_requests для получения подробной информации) браузер просто выполняет запросы и проверяет заголовки CORS в ответ (например, Access-Control-Allow-Origin
), чтобы определить, был ли запрос разрешен или результат должен быть отклонен.
Для предварительно настроенных запросов (например, PUT/PATCH/DELETE
, но также GET/POST
с нестандартными заголовками или содержимым типов, см. https://developer.mozilla.org/docs/Web/HTTP/CORS#Preflighted_requests для подробностей), браузеры выдают так называемый предполетный запрос с HTTP-командой OPTION
заранее, чтобы выяснить, разрешает ли конечная точка запросы с перекрестным источником или нет.
Браузер заранее выполняет предполетные запросы для любых запросов, которые могут изменять данные на сервере именно из-за поведения, которое вы наблюдали. Если бы он не использовал безобидный аванс OPTION
, сервер просто удалил бы соответствующие запросы, когда он получит запрос DELETE
, хотя запрос должен был быть отклонен политиками CORS сервера.
Однако, браузер не выполняет предполетные запросы для простых запросов, таких как большинство GET
, поскольку они считаются безопасными. Вот почему ваша точка останова все еще была достигнута, но ответ был отклонен браузером. Это также одна из причин, по которой вы никогда не должны изменять данные в запросах GET
, а использовать для этого специальные глаголы, такие как PUT/PATCH/DELETE
:)