none
Einfügen von Pfadsegment in ausgehende Links (HTML-Response) RRS feed

  • Frage

  • Gibt es einfache Wege ausgehende Links in der HTML-Antwort um ein Pfadsegment direkt nach dem Hosteintrag zu erweitern (Serverseitig oder Clientseitig)?

    Beispiele:

    <a href="http://mysite.me/">Start</a>
    <a href="http://mysite.me/UserId41af4d872673/">Start</a>
    
    <a href="/one/Start.aspx">Start</a>
    <a href="/UserId41af4d872673/one/Start.aspx">Start</a>

    Ich denke z.B. an Requestheader-Werte / Servervariabeln oder auch HttpContext-Eigenschaften mit deren Hilfe ASP.NET ausgehende Links generiert. Ähnlich der <base>-Tag-Eigenschaft auf Client-Ebene, welche leider nur relative Links erweitert.

    Das einzufügende Segment ist zum Start des Begin_Request-Event bekannt.

    Das Projekt ist als Server-Modul konzipiert. Idealerweise sollte der Benutzer neben der Modulregistrierung keine Änderungen an der Webseite vornehmen müssen.

    Was ich möglichst vermeiden möchte:

    • Regex-Änderungen im Response-Stream (PostReleaseRequestState-Event)
    • Outgoing Links mittels System.Web.Routing
    • IIS URL Rewriter outbound rules

    Bin für jede Idee und Anregung dankbar.


    Montag, 25. März 2019 15:44

Alle Antworten

  • In ASP.NET kann man ~ benutzen.

    http://meineseite.de/home/index oder https://meineseite.de/home/index 

    ist identisch mit ~/home/index 


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

    Montag, 25. März 2019 15:59
  • In ASP.NET kann man ~ benutzen.

    http://meineseite.de/home/index oder https://meineseite.de/home/index 

    ist identisch mit ~/home/index 

    Lieber Thomas, vielen Dank für deine Antwort. Vielleicht war mein Anliegen unklar.

    Die Frage ist, wie generiert sich die volle URL aus relativen Pfaden wie ~/home (runat server) oder /home zu http://meineseite.de/home. Im Browser anhand der Response-, serverseitig anhand der Requestinformationen? 

    Welche Möglichkeiten bestehen den Prozess dieser URL-Generierung zu beeinflussen, dass (aus z.B. ~/home/index im aspx-Dokument) anstelle von http://meineseite.de/home/index   http://meineseite.de/UserId1234/home/index generiert wird.

    UserId[0-9]+ ist variabel und zu Beginn des Request-Lifecycle bekannt.



    • Bearbeitet RoXL22 Donnerstag, 28. März 2019 16:55
    Donnerstag, 28. März 2019 16:55
  • Hi,

    die wichtigste Frage zuerst: Welche Technologie verwendest Du? Es gibt drölf Zilliarden Unterarten von ASP.NET, daher bitte mal genau sagen, welche davon setzt Du ein und für welche Zielanwendungsarten soll dein "Modul" (bitte auch hier genauer beschreiben, was genau das in deinem Fall ist) geeignet sein?

    Die Frage ist, wie generiert sich die volle URL aus relativen Pfaden wie ~/home (runat server) oder /home zu http://meineseite.de/home. Im Browser anhand der Response-, serverseitig anhand der Requestinformationen?

    Das passiert teils serverseitig, teils clientseitig. Der Server generiert aus ~/Abc den serverseitigen Part des Url ausgehend vom Root der Anwendung. Aus einem Verweis "~/Abc" wird dann "Abc". Aus "~/Abc/Images/Bild1.jpg" dann "Abc/Images/Bild1.jpg", unabhängig davon, in welchem Ordner der Anwendung dieser Verweis erzeugt wird. Also bspw. auch aus einer Seite/einem Control in irgendeinem Unterordner.

    Der Browser setzt den vollständigen Link dann aus dem aktuellen Url im Client plus der Link/Bild/... Angabe zusammen. Ein führender Slash geht dabei auf den Root der Domain. Ansonsten wird der Url ausgehend vom aktuellen Verzeichnis erzeugt.

    Wenn man sich also bspw. in www.deinedomain.tld/Irgendwie/Irgendwo/ befindet, wird ein Verweis auf "/Abc" zu www.deinedomain.tld/Abc aufgelöst, ein Verweis auf "Abc" zu www.deinedomain.tld/Irgendwie/Irgendwo/Abc.

    Welche Möglichkeiten bestehen den Prozess dieser URL-Generierung zu beeinflussen, dass (aus z.B. ~/home/index im aspx-Dokument) anstelle von http://meineseite.de/home/index http://meineseite.de/UserId1234/home/index generiert wird.

    Erst mal gar nicht. Die Frage ist auch, erkennt der Webserver den sp geänderten und dann aufgerufenen Url auch noch?

    Eigentlich hast Du schon so gut wie alle in Frage kommenden Möglichkeiten ausgeschlossen.

    Was ich möglichst vermeiden möchte:
    • Regex-Änderungen im Response-Stream (PostReleaseRequestState-Event)
    • Outgoing Links mittels System.Web.Routing
    • IIS URL Rewriter outbound rules

    Daher auch hier die Frage: Warum schließt Du diese Möglichkeiten aus?

    Wichtig wäre auch noch zu wissen, welche Art von Links in den Anwendungen erzeugt werden (nur anwendungsrelative oder auch absolute Links? Wenn letzteres: gehen diese alle auf dieselbe Domain, von der aus der Aufruf erzeugt oder ggfs. auch zu anderen Domains? Wenn auch hier letzteres: Wie soll die Erkennung stattfinden, welche der Links geändert werden sollen und welche nicht?

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Donnerstag, 28. März 2019 17:17
    Moderator
  • Dann habe ich deine Anfrage falsch verstanden.

    Jetzt hast Du eine ausführliche Antwort von Stefan, die ich so sicherlich nicht hinbekommen hätte.

    Ich persönlich würde wohl die UserId hinten dan die URL anhängen

    So in der Art: http://meineseite.de/home/index?UserId=1234

    Sowas macht sicherlich viel weniger aufwand und hat sich schon bewährt wie z.B. bei Google, diesem Forum und vielen anderen Seiten


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

    Donnerstag, 28. März 2019 18:54