Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Aspnet core 2.1 to 3.1, UrlHelper Verhalten
Savage
myCSharp.de - Member



Dabei seit:
Beiträge: 94

Themenstarter:

Aspnet core 2.1 to 3.1, UrlHelper Verhalten

beantworten | zitieren | melden

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?
Attachments
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

Zitat
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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Savage
myCSharp.de - Member



Dabei seit:
Beiträge: 94

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für das rasche Feedback.

Zitat
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.
Zitat
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.
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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Savage am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

Zitat
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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Savage
myCSharp.de - Member



Dabei seit:
Beiträge: 94

Themenstarter:

beantworten | zitieren | melden

Super, vielen Dank für den guten Tipp!
private Nachricht | Beiträge des Benutzers