Pytanie Jak uzyskać ASP.NET Web API (self-hosted) do nasłuchu * tylko * localhost?


Podążam za przykładem tutaj dla samodzielnie hostowanej usługi ASP.NET Web API. Jednak określenie "localhost" jako hosta w adresie bazowym jest tłumaczone na "+" (co oznacza "wszystko dostępne").

var baseAddress = new Uri("http://localhost:13210");
var configuration = new HttpSelfHostConfiguration(baseAddress);
configuration.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "{controller}/{id}",
    defaults: new {id = RouteParameter.Optional});

using (var server = new HttpSelfHostServer(configuration))
{
    server.OpenAsync().Wait();
    stop.WaitOne();
    server.CloseAsync().Wait();
}

Naprawdę chcę, aby mój host był po prostu "localhost" - będzie dostępny tylko z tego samego komputera, a ja nie chcę mieć kłopotów z listami ACL URL.

Jak skonfigurować Web API do nie przepisać "localhost" na "+"?


11
2018-06-23 12:31


pochodzenie


127.0.0.1/api ? - wal
Nie. To też zostanie przepisane. - Roger Lipscombe
jako sposób działania, przyglądając się temu nieco dalej, co się stanie, jeśli dodasz domenę (np. me.localhost) do swojego hosts plik mapowany do 127.0.0.1, a następnie dostajesz webapi do listy na me.localhost / api? - wal
Dzięki. Tylko dla mojej wiedzy, w jaki sposób (i na jakiej warstwie) dowiadujesz się, że została ona przetłumaczona +? - KFL
Użyłem JetBrains dotPeek. - Roger Lipscombe


Odpowiedzi:


Ustaw swój HostNameComparisonMode właściwość do Exact:

var config = new HttpSelfHostConfiguration("https://localhost/api/");
config.HostNameComparisonMode = HostNameComparisonMode.Exact;

Widzieć Ten artykuł Aby uzyskać więcej informacji na temat HostNameComparisonMode


9
2018-06-23 12:51



Dzięki. Spędziłem godzinę, szukając w dotPeek. Nawet przy tych informacjach wciąż nie mogę znaleźć miejsca, w których faktycznie dochodzi do transformacji. - Roger Lipscombe
nie martwi się, że został opublikowany untested, ale wiedziałem, że ta właściwość istniała w WCF binding element, więc zakładam, że zostanie przekazany do wiązań punktów końcowych (nie jestem pewien, w jakiej formie webapi używa wcf pod maską) - wal
Wiedziałem, że istnieje w WCF, ale założyłem, że kontrolowane sprawdzanie poprawności po otrzymaniu żądania, a nie kontrolowanie tego, co słuchacz rzeczywiście próbował powiązać. - Roger Lipscombe
@RogerLipscombe to rzeczywiście dostaje się do wiązania. widzieć OnConfigureBinding w System.Web.Http.SelfHost.HttpSelfHostConfiguration linia 325 - wal