Самостоятельный веб-сервис без загрузки

Я просто пытаюсь открыть и запустить один из моих командных проектов, и это проект веб-API .NET, который настроен для самостоятельного размещения. Для которой конфигурация выглядит следующим образом:

var host = new WebHostBuilder()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseKestrel()
                .UseStartup<Startup>()
                .UseUrls("http://0.0.0.0:3434")
                .Build();

            host.Run();

[Fiddler] Не удалось подключиться к «0.0.0.0». Ошибка: AddressNotAvailable (0x2741). System.Net.Sockets.SocketException Запрошенный адрес недействителен в своем контексте 0.0.0.0:3434

Я не уверен, что еще делать. Какие-либо предложения?


person Lost    schedule 04.04.2017    source источник
comment
0.0.0.0 означает, что он привязан ко всем IP на вашей машине, вам все равно нужно установить соединение через физический адрес. Попробуйте http://127.0.0.1:3434, а также http://192.168.0.11 ‹- это будет адрес вашей локальной сети.   -  person Matt Clark    schedule 04.04.2017


Ответы (1)


Попробуйте использовать

var host = new WebHostBuilder()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseKestrel()
            .UseStartup<Startup>()
            .UseUrls("http://*:3434")
            .Build();

host.Run();

Исходная документация Введение в размещение в ASP.NET Core

URL-адреса серверов string

Ключ: urls. Задайте разделенный точкой с запятой (;) список префиксов URL-адресов, на которые сервер должен реагировать. Например, http://localhost:123. Имя домена/хоста можно заменить на «*», чтобы указать, что сервер должен прослушивать запросы на любой IP-адрес или хост, используя указанный порт и протокол (например, http://*:5000 или https://*:5001). Протокол (http:// или https://) должен быть включен в каждый URL-адрес. Префиксы интерпретируются настроенным сервером; поддерживаемые форматы будут различаться между серверами.

new WebHostBuilder()
    .UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")

После того, как хост запущен и работает, необходимо убедиться, что контроллеры имеют правильные настроенные маршруты и что вызываются правильные URL-адреса, в противном случае будет возвращено 404 Not Found.

например, следующий контроллер

[Route("")]
public class RootController : Controller {
    [HttpGet] //Matches GET /
    public IActionResult Get() {
        return Ok("hello world");
    }

    [HttpGet("echo/{value}] //Matches GET /echo/anything-you-put-here
    public IActionResult GetEcho(string value) {
        return Ok(value);
    }
}

с указанной выше конфигурацией хоста должны соответствовать следующим URL-адресам соответственно

http://localhost:3434/

http://localhost:3434/echo/stack-overflow
person Nkosi    schedule 04.04.2017
comment
Ну, изменив его на * or for the matter of fact to localhost, выдает 404. Не знаю, что делать. - person Lost; 04.04.2017
comment
@CoffeeBean теперь заключается в том, чтобы убедиться, что контроллеры имеют правильные настроенные маршруты и что вы вызываете правильный URL-адрес. У вас есть контроллер, который обрабатывает корневой URL? - person Nkosi; 04.04.2017
comment
хорошо, так что я нашел проблему. С моей стороны это было немного глупо. Все было настроено правильно, только в корневом каталоге не было файла по умолчанию, такого как Index для загрузки, поэтому мне пришлось явно перейти к URL/swagger.html, и тогда это сработало. - person Lost; 04.04.2017
comment
Ваш последний комментарий был действительно полезен, у меня действительно не было контроллера, который обрабатывает корневой URL-адрес. - person Lost; 04.04.2017