Я создал небольшое веб-приложение, используя .NET 7. Оно отлично работает локально с https://127.0.0.1:1234
или https://localhost:1234
.
Он использует вызовы API GET/POST
для получения данных с других компьютеров и отправки в базу данных. Поэтому я хочу, чтобы его можно было подключить к другим устройствам в той же сети. Когда я меняю его на свой реальный локальный IP, например https://192.168.1.1:9111
, он больше не работает. Я получаю
Ошибка: розетка зависла
от Почтальона.
Вот мой код. Я что-нибудь пропустил?
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.UseCors(policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
app.Run("https://192.168.1.1:9111");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
@Panagiotis Kanavos 192.168.1.1 — это IP-адрес маршрутизатора. Я хочу использовать его вместо localhost, чтобы другие устройства в той же сети могли получить доступ к этому приложению.
.NET 7 уже не поддерживается — больше не используйте его для новых вещей, переключитесь на .NET 8.
Привет. Я использую только app.run() без Ip. Также проверьте, открыт ли брандмауэр вашего компьютера для порта 9111.
works fine locally with https://127.0.0.1:1234 or https://localhost:1234 https://192.168.1.1:9111, it doesn't work anymore
--> когда мы тестируем на локальном компьютере, это не связано с брандмауэром, но если мы хотим получить к нему доступ на другом устройстве, мы должны убедиться, что брандмауэр открыт. Кстати, у меня на стороне был тест с вашим кодом app.Run("https://192.168.1.1:9111");
, который помог мне выполнить запрос Get через браузер через https://192.168.1.1:9111/endpoint
. Так что я боюсь, что вы можете проверить это на другом устройстве?
Кстати, мы могли бы настроить launchsettings.json -> Profiles ->https -> "applicationUrl": "https://0.0.0.0:5001;http://0.0.0.0:5000"
вместо стандартного https://localhost
. Так что нам нужно использовать только app.run()
. Затем убедитесь, что https://192.168.1.1:5001
работает на локальном компьютере, а затем попробуйте посетить его на других устройствах. Если локально это сработало, но не на других устройствах, давайте устраним проблему с сетью. Например, в вашей компании есть политика отказа от подобных подключений.
это мой результат теста с пустельгой i.sstatic.net/FlnZ9EVo.png
@Tiny Wang ВАУ, спасибо! Эта часть настройки очень помогла!
Если вы хотите, чтобы другие устройства могли подключаться к вам, вам необходимо установить IIS на свой компьютер или любую другую серверную технологию и просто запустить
app.Run();
«Вам необходимо установить на свой компьютер IIS или любую другую серверную технологию» — нет, это не требуется.
но я просто попробовал, и на моем компьютере этот код не сработал builder.WebHost.UseUrls
. Может быть, это моя плохая идея
Вам необходимо указать, какие конечные точки должен прослушивать ваш API.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("http://localhost:9111", "http://127.0.0.1:9111", "http://192.168.1.1:9111");
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
var app = builder.Build();
// Rest of your code
// You do not need the `app.Run...` part
Используйте 0.0.0.0 для привязки ко всем локальным интерфейсам. Возможно, вам придется открыть порт брандмауэра