У меня проблема с запросом к моему API из моей программы на C#, это дает мне ошибку CORS (из Интернета это работает, потому что мой локальный IP-адрес находится в белом списке, но из программы это дает мне ошибку запроса cors).
API создан в Express.
Мои коры:
const dominiosPermitidos = [url];
const corsOptions = {
origin: function(origin, callback) {
console.info(origin);
if (dominiosPermitidos.indexOf(origin) !== -1) {
//El origen del request esta permitido
callback(null, true);
} else {
callback(new Error('No permitido por Cors'))
}
}
}
app.use(cors(corsOptions));
Вызов в С#:
url = "127.0.0.1/api/datos";
HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
Stream myStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myStream);
//Leemos los datos
string Datos = HttpUtility.HtmlDecode(myStreamReader.ReadToEnd());
dynamic data = JsonConvert.DeserializeObject(Datos);
return data;
Ошибка С# ошибка
Ошибка API ошибка
Должен ли я деактивировать Cors?
Спасибо
Я попытался поместить свой локальный IP-адрес в белый список, но когда я вызываю API из своей программы на C#, CORS выдает мне ошибку
Я только что обновил вопрос и прикрепил 2 картинки с ошибками в C# и NodeJS. @вивекнуна





Ваша программа на С#, похоже, не отправляет источник, и это нормально, поскольку это не браузер. Но поскольку ваш сервер настроен на раннюю ошибку, если CORS собирается заблокировать ответ от достижения браузера, вы получаете от него ошибку (которую вы обычно не смогли бы прочитать, если бы она была из браузера).
Если вы посмотрите на https://www.npmjs.com/package/cors в разделе «Настройка CORS с динамическим источником», вы увидите, что во втором примере они поставили « || !origin» по этой самой причине, поэтому сервер продолжает обрабатывать его, если он с сервера. Таким образом, вы должны иметь возможность просто изменить код сервера Node.js следующим образом:
const dominiosPermitidos = [url];
const corsOptions = {
origin: function(origin, callback) {
console.info(origin);
if (dominiosPermitidos.indexOf(origin) !== -1 || (! origin)) {
//El origen del request esta permitido
callback(null, true);
} else {
callback(new Error('No permitido por Cors'))
}
}
}
app.use(cors(corsOptions));
Вам также может быть полезно: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Надеюсь это поможет.
Редактировать: поскольку я не могу писать комментарии, мне придется сделать это здесь. Вы можете отключить CORS на сервере, но это будет означать, что ваш веб-сайт в другом источнике не сможет отправлять запросы. Но я мог неправильно понять, и вы никогда не будете отправлять запросы к API из браузера, и в этом случае вы можете просто удалить всю логику CORS.
Большое спасибо, вы решили мою проблему полностью, но у меня есть вопрос, если я поставлю !origin, может ли это быть ошибкой безопасности?
Нет, было бы совершенно безопасно не иметь на сервере никаких проверок или логики, связанных с CORS. Проблема в том, что вам нужно иметь немного логики, если вы хотите, чтобы браузер мог взаимодействовать с сервером (если только сервер не размещает текущую страницу, что упрощает ситуацию). Если вам интересно, я бы посоветовал взглянуть на ссылку mdn, но я дам краткое объяснение того, что делает CORS... Скажем, вы используете свой браузер для посещения evil.com, вы не Не хочу, чтобы он мог делать запросы к bank.com и выдавать себя за вас. Таким образом, браузеры будут останавливать запросы, если это не разрешено bank.com.
Но серверы не имеют этого ограничения, поскольку они имеют больший контроль над тем, какие файлы cookie они отправляют, и вы все равно сможете обойти их все, поскольку они не работают в браузере, поэтому у них больше привилегий. Ранняя ошибка не повышает безопасность, так как любой может легко обойти ее, если захочет, это просто для того, чтобы сервер не утруждал себя обработкой запроса, который клиент никогда не увидит. Если вы хотите ограничить, кто может получить доступ к этому API, у вас будет система ключей API в дополнение к правильно настроенному CORS (т. е. не просто разрешение каждого источника).
В чем ошибка?