Привет всем, у меня проблема с вызовом apis моего сервера .net-core из симуляторов iOS и Android, а из браузера он работает. В моем Backend CORS включены:
public void ConfigureServices(IServiceCollection services){
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
services.AddMvc();
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){
if (env.IsDevelopment()){
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors("MyPolicy");
app.UseEndpoints(endpoints =>{
endpoints.MapControllers();
});
}
Служба axios GET:
export function axiosGet():Promise<any>{
const url = "https://localhost:5004/api/Aliments/";
return axios.get(url)
.then(response => {
return response.data;
})
.catch(error => {
console.info(error);
});
};
Как вы думаете, почему когда я вызываю API из симуляторов IOS/Android, мне возвращается эта ошибка?
Error: Network Error
at createError (createError.js:16)
at EventTarget.handleError (xhr.js:84)
at EventTarget.dispatchEvent (event-target-shim.js:818)
at EventTarget.setReadyState (XMLHttpRequest.js:600)
at EventTarget.__didCompleteResponse (XMLHttpRequest.js:395)
at XMLHttpRequest.js:508
at RCTDeviceEventEmitter.emit (EventEmitter.js:189)
at MessageQueue.__callFunction (MessageQueue.js:416)
at MessageQueue.js:109
at MessageQueue.__guard (MessageQueue.js:364)
РЕДАКТИРОВАТЬ 1 Я пытался изменить IP-адрес хоста на 192.168.1.104 (это IP-адрес локальной сети, на котором размещен мой сервер)
это мой файл launchSettings.json
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59803",
"sslPort": 44303
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "MyApp",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MyApp": {
"commandName": "Project",
"launchBrowser": false,
"launchUrl": "MyApp",
"applicationUrl": "https://192.168.1.104:5004;",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Симуляторы подключены в режиме Lan, потому что я использую expo.
IP-адрес симулятора отличается от IP-адреса вашего хост-компьютера. Хотя они находятся в одной локальной сети. Вы можете изменить IP в этом URL.
const url = "https://[host ip]:5004/api/Aliments/";
IP-адрес можно запросить с помощью: ipconfig в cmd.
этот URL-адрес является адресом сервера
@ALD, вы используете localhost, localhost — это адрес симулятора. Таким образом, вы можете изменить его на определенный IP-адрес, например: 1.1.2.3:5000.
Удалите services.AddMvc();, потому что он дублируется с services.AddControllers().
я использовал se follow url = "192.168.1.104:5004/api/Aliments" и изменил мой launchSettings.json в BE. Я только что разместил файл launchSettings.json в основном сообщении.
Вы меняете адрес в axiosGet? const url = "https://192.168.1.104:5004/api/Aliments/"; `launchSettings.json` изменять не нужно.
да, я делаю это, но он возвращает мне в консоли эту ошибку GET https://192.168.1.104:5004/api/Aliments/ net::ERR_CONNECTION_REFUSED
меняя applicationUrl на https://192.168.1.104:5004 в моем файле launchSettings.json, работает только через браузер, в симуляторах делать нечего.
Вы используете https на локальном хосте (почти автоматически подписанный сертификат) на нестандартном порту https. В разработке (за исключением особых случаев) вы можете использовать протокол http. Попробуйте перейти с https на http, все должно работать.
Большое спасибо, теперь он отлично работает на локальном хосте.
Ваш симулятор подключен к Интернету?