none
Client IP herausbekommen RRS feed

  • Frage

  • Hi, 

    ich möchte in meiner Blazor App gern die IP des Clienten Auswerten. Wie komme ich an diese heran? Später möchte ich die IP zu gewissen Regionen zuordnen und der Content der Seite soll sich an die Region von der aus der User zugreift anpassen.

    (Wie) ist das möglich? 

    LG


    .::datekk::.

    Montag, 23. März 2020 09:58

Alle Antworten

  • Hallo,

    versuch mal bei google "asp.net core client ip" einzugeben.

    Ich hoffe das löst dein Problem



    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Montag, 23. März 2020 17:40
  • Hallo Thomas,

    das habe ich natürlich auch schon gemacht und gefunden. Ich habe große Schwierigkeiten beim übertragen von .net core code in meine blazor app. Ich brauch da einfach mal mehr Hilfe. Könntest Du Dir vorstellen, mich mal etwas zu Coachen? Teamviewer o.ä.? Sonst hänge ich noch ewig in den Seilen. Und ich habe so eine große Lust, da besser zu werden.

    LG


    .::datekk::.


    • Bearbeitet datekk2 Dienstag, 24. März 2020 15:43
    Dienstag, 24. März 2020 10:45
  • Ich drücke es mal ganz einfach aus. Blazor ist ein Frontend Framework, es ist dafür zuständig dem User eine UI mit den Daten vom Backend anzuzeigen. Zudem Benutzereigaben wieder ans Backend weiter zu geben. Mehr kann Blazor nicht und muss auch nicht können. Alles andere ist ASP.NET Core.

    Ein Client hat wahrscheinlich viele IPs, dich interessiert aber nur die IP die mit deinem Backend kommuniziert. Dein Backend ist ASP.NET Core nicht Blazor. Blazor kann dir diese Informationen auch nicht zur Verfügung stellen da es diese Informationen gar nicht hat und auch keine Methoden dazu zur Verfügung stellt. Diese Methoden kommen von ASP.NET Core.

    Ich biete sowas nicht an. Du kannst aber gern Stefan fragen, kostenlos ist das aber nicht. 


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Dienstag, 24. März 2020 17:23
  • Ok. Mir gefällt Blazor ganz gut, da das Frontend wirklich nett aufzubauen ist und ich nicht noch in Javascript oder JQuery tiefer einsteigen muss... Von daher würde ich ungern drauf verzichten. 

    In vielen Videos und den dortigen Projekten, gerade auch was das Thema Identity betrifft, kommen ja neben den .razor Pages auch cshtml Pages vor (die mit Page-Model-Datei). können diese z.B. bei der gestellten Frage helfen, die IP zu übermitteln? 

    Wenn ich google finde ich z.B. diese Seite hier: http://bekenty.com/how-to-get-client-ip-address-in-asp-net-core/

    Kann ich diese Funktionalität irgendwie in meine Blazor App bekommen - halt über die Variante der cshtml.cs dateien? 

    Mir ist immer noch nicht richtig klar, warum Blazor Pages z.B. nicht eine ClientIp wiedergeben können.  Es ist doch eine "Serverside Blazor App".. Das heißt für mich, die Seite wird auf dem Server erstellt und ausgeführt. Wenn der Client sich mit dem Server verbindet, indem er meine Seite aufruft, so muss doch der Server die IP haben, warum kann ich darauf nicht zugreifen? Ich habe wahrscheinlich das ganze System noch nicht so verstanden.

    Vielleicht kannst Du hierauf auch nochmal eingehen.

    Wie kann ich mit dem Stefan in Kontakt kommen? Wenn es jetzt nicht ein Vermögen kostet, würde ich ihn gern mal 1 bis 2 Stunden buchen.


    .::datekk::.


    • Bearbeitet datekk2 Dienstag, 24. März 2020 19:57
    Dienstag, 24. März 2020 19:56
  • So, hier ein Lösungsansatz:

    Ich habe die Datei "Serverside.cshtml" eingefügt und im Pagemodel (cshtml.cs) folgendes gemacht:

    public class ServersideModel : PageModel
    
            
        {
            private readonly HttpContextAccessor _accessor;
            
            public ServersideModel(HttpContextAccessor accessor)
            {
                
                _accessor = accessor;
               
            }
    
            public ActionResult OnGet()
            {
    
                
                var ip = _accessor.HttpContext.Connection.RemoteIpAddress.ToString();
                string returnUrl = Url.Content($"~/{ip}");
                return LocalRedirect(returnUrl);
    
            }
        }

    Die Seite wird zum Beispiel von der Index.razor aufgerufen und die cshtml Seite ruft die IP ab und sendet diese in diesem Beispiel wieder an die Index.razor über die URL zurück, wo sie als Parameter erwartet wird. Damit kann die IP dort angezeigt werden. 


    LG


    .::datekk::.


    • Bearbeitet datekk2 Mittwoch, 25. März 2020 13:49
    Mittwoch, 25. März 2020 13:48
  • Und warum nicht einfach so 

    Startup.cs

    public void ConfigureServices(IServiceCollection services)
            {
                services.AddRazorPages();
                services.AddServerSideBlazor();
                services.AddSingleton<WeatherForecastService>();
    
                //Hinzufügen
                services.AddHttpContextAccessor();
            }

    Index.razor

    @page "/"
    @inject Microsoft.AspNetCore.Http.IHttpContextAccessor accessor
    
    <h1>Hello, world!</h1>
    <p>User IP: @accessor.HttpContext.Connection.RemoteIpAddress.ToString()</p>
    
    Welcome to your new app.


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Mittwoch, 25. März 2020 16:58
  • Es ist doch eine "Serverside Blazor App".. Das heißt für mich, die Seite wird auf dem Server erstellt und ausgeführt. Wenn der Client sich mit dem Server verbindet, indem er meine Seite aufruft, so muss doch der Server die IP haben, warum kann ich darauf nicht zugreifen? Ich habe wahrscheinlich das ganze System noch nicht so verstanden.




    Die Seite wird auf dem Server gebaut aber dann als HTML Dokument zum Client geschickt. Die weitere Kommunikation findet dann über SignalR statt oder aber über einen weitere anfrage an den Server per Http. Zu keinem Zeitpunkt ist der Client irgendwie auf dem Server die Seite die der User sieht läuft auch nicht auf dem Server. 

    Zudem wird ein virtueller Dom auf dem Server gehalten. Bei jeder Änderung des Dons auf dem Server, wird per JavaScript auf dem Client die Änderungen vorgenommen. Jede Aktion des Users wird wiederum mit JavaScript und SignalR zum Server übertragen. Deswegen darf die Verbindung zum Server nicht abbrechen. 

    Das ist aber nur bei Blazor SS so nicht bei Webassembly. 



    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings



    Mittwoch, 25. März 2020 17:15