. net ядро, позволяющее отправить ошибку 401 при использовании CORS (вместо нуля) - PullRequest
0 голосов
/ 03 февраля 2020

Мой клиент JS приложение получает код состояния 0, когда оно фактически равно 401.
Когда я использую почтальон для выполнения того же запроса, я получаю 401, как и ожидалось.

Я включил cors как следующее:

services.AddCors(o => o.AddPolicy("cors", builder =>
            {
                builder.WithOrigins("http://localhost:4200")
                       .AllowAnyMethod()
                       .AllowAnyHeader()
                       .AllowCredentials();
            }));

....
app.UseCors("cors");

Cors работает, когда нет проблемы с аутентификацией (401).

Я получаю код ошибки 0 на стороне клиента, когда предполагается, что он равен 401 .

enter image description here

1 Ответ

1 голос
/ 03 февраля 2020

Причина этой ошибки - наиболее вероятная комбинация CORS на вашем сервере и в веб-браузере.

Причина: Я предполагаю, что некоторые из необходимых заголовков CORS отсутствуют в ответе вашего сервера. Браузеры возвращают статус 0, когда используются неправильные заголовки Cors.

Решение: Опять же, я предполагаю, что порядок регистрации вашего промежуточного программного обеспечения неверен. Согласно документам:

При маршрутизации на конечную точку промежуточное программное обеспечение CORS должно быть настроено на выполнение между вызовами UseRouting и UseEndpoints. Неправильная конфигурация приведет к тому, что промежуточное ПО перестанет работать правильно.

Я бы зарегистрировал ваше промежуточное ПО в таком порядке (в зависимости от того, какое промежуточное ПО вы используете):

app.UseRouting();
app.UseCors("cors");
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});
...
//register app.UseMvc(); last
...