Laden...

Aspnet core 2.1 to 3.1, UrlHelper Verhalten

Erstellt von Savage vor 2 Jahren Letzter Beitrag vor 2 Jahren 309 Views
S
Savage Themenstarter:in
100 Beiträge seit 2004
vor 2 Jahren
Aspnet core 2.1 to 3.1, UrlHelper Verhalten

Hallo zusammen,

ich migriere gerade eine Asp.NET Core Anwendung von 2.1LTS zu 3.1LTS und muss feststellen, dass sich das Verhalten der Linksgenerierung geändert hat.
Früher wurden mit dem UrlHelper Parameter in der Route, welche auf der Zielseite vorhanden sind automatisch übernommen. Ich habe 2 einfache Testprojekte mit exakt gleichen Pages
einmal mit core2.1 und core 3.1 erzeugt, um es zu demonstrieren.

Siehe Screenshots.

Wie kann ich das alte Verhalten unter 3.1. nutzen?

16.806 Beiträge seit 2008
vor 2 Jahren

Wie kann ich das alte Verhalten unter 3.1. nutzen?

a) Urls sollten mittlerweile mit Hilfe des LinkGenerator Services erzeugt werden
b) Das Verhalten aus 3.1 ist eigentlich das gewünschte Verhalten; man will die implizite Parametrisierung eigentlich nicht. Gab viel Feedback auf GitHub dazu.

Was mir nur auffällt:
Der Parameter wird ja automatisch gesetzt, wenn der PropertyName dem Parameter-Name entspricht.
Wie gesagt; sollte man nich mehr tun - aber hast vielleicht den Namen zusammen mit der Klasse geändert? Weil die ist ja auch unterschiedlich.

S
Savage Themenstarter:in
100 Beiträge seit 2004
vor 2 Jahren

Vielen Dank für das rasche Feedback.

Was mir nur auffällt:
Der Parameter wird ja automatisch gesetzt, wenn der PropertyName dem Parameter-Name entspricht.
Wie gesagt; sollte man nich mehr tun - aber hast vielleicht den Namen zusammen mit der Klasse geändert? Weil die ist ja auch unterschiedlich.

Habe ein paar Testprojekte mit unterschiedlichen Varianten, stets unterschiedlich je nach Core Version.

a) Urls sollten mittlerweile mit Hilfe des
>
erzeugt werden
b) Das Verhalten aus 3.1 ist eigentlich das gewünschte Verhalten; man will die implizite Parametrisierung eigentlich nicht. Gab viel Feedback auf GitHub dazu.

Macht auch Sinn, allerdings habe ich ein riesiges Projekt zu migrieren und alle Links zu prüfen bzw. anzupassen dürfte Tage dauern. 😭

Viele Links in den Razor-Pages wurden auch mit Taghelper <a asp-page="xxx">Link</a> erzeugt, dass das gleiche geänderte verhalten nun hat.

16.806 Beiträge seit 2008
vor 2 Jahren

Viele Links in den Razor-Pages wurden auch mit Taghelper .. erzeugt.

Meiner Meinung nich so praktisch, weil das richtig scheisse beim Refactoring ist, was Du nun halt ausbaden musst 😉

Wenn Du also schon dabei bist, dann mach Dir direkt ne Abstraktion der Link-Erzeugung, das lohnt sich i.d.R. immer; haben wir hier im Forum auch gemacht.
So musst Du auch nur noch dann den Router injecten.

Beispiel:


namespace MyCSharp.Portal.Routing
{
    public interface IPortalRouter
    {
        UrlRelative ToPrivacy(int? page= null)
        {
            string? query = null;
            if (page.HasValue) query = AddToQueryFormat(query, RouteTemplates.ParamPage, page.GetValueOrDefault()); // erzeugt den Query ?{0}={1}

            return Template(RouteTemplates.Privacy + query);
        }

In unserer ersten Variante war hier der UrlHelper drunter, danach der LinkGenerator (mittlerweile erzeugen wir die Routen vollständig alleine, aus Performance-Gründen).
Aber egal was wir aktuell verwenden: der Sinn ist, dass die die Url Generierung abstrahierst, was alles viel einfacher macht. Besonders die Tag Helper sind in größeren Anwendungen einfach nicht mehr wartbar.
Und dadurch, dass wir eben bei den IPortalRouter Methoden die Parameter einfach fix deklarieren können: super einfach zu warten und super einfach zu testen.

So bist Du aktuell mehr oder minder auf Try and Error-Suche, wo noch was fehlt und was geändert werden muss.
Muss man nun halt durch.

S
Savage Themenstarter:in
100 Beiträge seit 2004
vor 2 Jahren

Super, vielen Dank für den guten Tipp! 🙂