Ошибка типа: Сбой сетевого запроса в react-native

#react-native #.net-core

Вопрос:

Когда я использую Postman, я могу успешно отправить запрос по этому адресу: https://localhost:9001/api/Account/authenticate .

Однако мое приложение react-native выдает ошибку для того же запроса:

Ошибка типа: Сбой сетевого запроса

Вот мой код запроса:

 _login() {
    var api = API.concat("api/Account/authenticate");
    api = 'https://localhost:9001/api/Account/authenticate';
    fetch(api, {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'multipart/form-data'
        }, 
        body: JSON.stringify({
            'email': 'superadmin@gmail.com',
            'password': '123Pa$word!',
        }),

    })
        // .then((response) => response.json())
        .then((res) => {
            console.log("res.status", res.status);
            console.log('data: ', res.data);
            //  console.log('jwToken: ', res.data.jwToken);
            console.log('message: ', res.message);
            console.log('api:', api);                  
        });
}
 

Комментарии:

1. Я исправил синтаксическую ошибку, которая выглядела как опечатка в вашем коде (не имеющая ничего общего с вашей сетевой ошибкой). Однако вы должны убедиться, что эта правка была точной.

2. Я также рекомендую включить информацию о запросе от почтальона. Я вижу, что вы нашли ответ, но это полезно для других пользователей в будущем; мы просто будем гадать о вашей проблеме.

Ответ №1:

Попробуйте добавить

 <uses-permission android:name="android.permission.INTERNET"/>

 

в AndroidManifest.xml в главном каталоге вашего adroid/app/src/

И эмулятор Android или устройство имеют свою собственную ОС, поэтому вы не можете получить к нему доступ localhost .

Попробуйте изменить

https://localhost:9001/api/Account/authenticate

Для

https://10.0.2.2:9001/api/Account/authenticate

Комментарии:

1. Да, это есть в файле AndroidManifest.xml. Я использую: эмулятор adb -s-5554 обратный tcp:56789 tcp:56789 он работает. Но не показывать данные JWT json, как Почтальон.

2. пожалуйста, прочтите мой обновленный ответ, надеюсь, он сработает

Ответ №2:

Попробуйте выполнить следующие изменения :

 login = () => {
    var api = API.concat("api/Account/authenticate");
    api='https://localhost:9001/api/Account/authenticate';
    fetch({
        url: api,
        method: 'POST',
        headers: {
            Accept: 'application/json',
        }, 
        body: JSON.stringify({
            email: 'superadmin@gmail.com',
            password: '123Pa$word!',
        }),
    })
    .then((res) => {
        console.log("res.status", res.status);
        console.log('data: ', res.data);
        //  console.log('jwToken: ', res.data.jwToken);
        console.log('message: ', res.message);
        console.log('api:', api);                  
    })
    .catch(err => {
        console.log('Error : ', err.message)
    })
}
 

Ответ №3:

Это работает

 _login() {
    var myHeaders = new Headers();
    myHeaders.append("Content-Type", "application/json");

    var raw = JSON.stringify({
        "email": "superadmin@gmail.com",
        "password": "123Pa$word!"
    });

    var requestOptions = {
        method: 'POST',
        headers: myHeaders,
        body: raw,
        redirect: 'follow'
    };
    var api = API.concat("api/Account/authenticate"); 
         
    fetch(api, requestOptions)
        .then(response => response.json())
        .then(result => {  
            console.log('succeeded: ', result.succeeded);  
            console.log('message: ', result.message);  
            console.log('errors : ', result.errors);           
            console.log("res", result);
            console.log('data: ', result.data);       
            console.log("res.data.jwtoken: ", result.data.jwToken);             
            console.log('api:', api);     
        })           
  
}