无法将android React Native应用程序连接到localHost .NET api

时间:2017-08-10 03:49:11

标签: .net visual-studio react-native localhost react-native-android

我有一个React Native应用程序,只需要登录并随后使用返回的access_token获取数据。我试图通过连接到localHost上运行的本地托管的.NET API来调试错误:50968。返回

    TypeError: Network request failed

我已经在manifext.xml中启用了互联网权限。 大多数谷歌搜索一直在说我需要将localHost:50968更改为我的IP地址。到目前为止,这是最接近使用'192.168.0.2:50968/token但是以下是响应。

    { type: 'default',
status: 400,
ok: false,
statusText: undefined,
headers: { map: { 'content-length': [ '334'
        ],
connection: [ 'close'
        ],
date: [ 'Thu,
            10 Aug201703: 19: 14 GMT'
        ],
server: [ 'Microsoft-HTTPAPI/2.0'
        ],
'content-type': [ 'text/html; charset=us-ascii'
        ]
    }
}, url: 'http: //192.168.0.2:50968/token',
 _bodyInit: 
 '<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">\r\n
<HTML>

<HEAD>
    <TITLE>Bad Request</TITLE>\r\n
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>\r\n

<BODY>
    <h2>Bad Request - Invalid Hostname</h2>\r\n
    <hr>
    <p>HTTP Error 400. The request hostname is invalid.</p>\r\n
</BODY>

</HTML>\r\n', _bodyText: '
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> \r\n
<HTML>

<HEAD>
    <TITLE>Bad Request
    </TITLE>\r\n
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>\r\n

<BODY>
    <h2>Bad Request - Invalid Hostname</h2>\r\n
    <hr>
    <p>HTTP Error 400. The request hostname is invalid.</p>\r\n
</BODY>

</HTML>\r\n'}

我在Visual Studio中有一个等待请求的断点,但我不能为我的生活让这个工作。 我的获取代码如下。

我试过这些作为URL_LOGIN并且都不起作用。 'http://localHost:50968/token'; 'http://192.168.0.2:50968/token';

    fetch(URL_LOGIN, {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            //application/x-www-form-urlencoded
        },
        body: data
    }).then((response) => {
        var jsonResponse = JSON.parse(response._bodyInit);
        try {
            AsyncStorage.setItem('token', jsonResponse.access_token);
            loginUserSuccess(dispatch, response)
        } catch (error) {
            console.log(`Error while saving to Async Storage ${error.message}`)
            loginUserFailed(dispatch, error)
        }
    }).catch(response => {
       loginUserFailed(dispatch, response)
    });

任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

使用10.0.2.2代替localhost

http://10.0.2.2:50968/token

在android localhost上映射到模拟器而不是你的机器。

希望这有帮助

答案 2 :(得分:0)

在您发布的回复中,我注意到它显示url: 'http: //192.168.0.2:50968/token'http://之间有空格。您确定自己没有在URL_LOGIN

中错误地格式化您的网址吗?