1

Ich benutze ASP.NET Core MVC mit C#.Return URL Funktionalität

Ich habe eine Funktion auf meinem Login-Controller, um einen Parameter namens ReturnUrl zu nehmen. Die Idee ist, dass, wenn dies bei der Anmeldung des Benutzers festgelegt wird, ich sie auf die Seite zurückleiten kann. Geradeaus genug.

Der Code sieht wie folgt aus:

[HttpGet] 
[AllowAnonymous] 
public IActionResult Login(string returnUrl = null) 
{ 
    ... 
} 

jedoch die Login-Funktionalität von MVC und der Hauptinhalt behandelt wird, wird mit Angular (Version 1 nicht 2). Routen in meiner App sind (zum Beispiel) http://localhost/#/location1.

Wenn ich meine MVC Login-Seite mit (wieder, nur ein Beispiel) http://localhost/Login/?returnUrl=http://localhost/#/location1, dann alles, was ich in meinem returnUrl Parameter bekomme, ist http://localhost/. Es fällt alles ab dem Symbol # ab.

Haben Sie Ideen, wie Sie den Code automatisch stoppen können, indem Sie das Symbol # eingeben und die vollständige URL als returnUrl Objekt verwenden?

+0

Bitte verwenden Sie keine [tag: asp.net-mvc] für ASP.NET Core MVC verwandte Tags, es ist [tag: asp.net-core-mvc]. [tag: asp.net-mvc] ist für den Legacy ASP.NET MVC Webstack. Stellen Sie auch keine Tags in Frage Titel – Tseng

Antwort

0

Ich habe 2 Ideen, die für Sie arbeiten könnte:

  1. versuchen, die Rückkehr URL in dem Client zu entkommen vefore die Anfrage zu senden.
  2. statt String den Typ Rückkehr URL Uri Objekt ändern

    [HttpGet] 
    [AllowAnonymous] 
    public IActionResult Login(Uri returnUrl = null) 
    { 
        ... 
    } 
    
+0

Ich bekomme einen Übersetzungsfehler von String zu Uri ändern. Keine Kontrolle der Client-URL, da es ein Lesezeichen von einer Seite innerhalb unserer App sein könnte :-( –

0

, wenn Sie in Ihrem Browser Debug-Tools bemerken, würde der Browser diese # das Senden nicht und jeder Text, nachdem sie auf dem Server , also würde der Server überhaupt nichts über seine Existenz wissen.

Anstatt also so etwas wie unten,

http://localhost/Login/?returnUrl=http://localhost/#location1

dies tun (man beachte die Codierung von # in %23 in der URL)

http://localhost/Login/?returnUrl=http://localhost/%23location1