2016-03-21 7 views
0

Ich rufe ResetPassword Aktion aus einer E-Mail (ASP.NET MVC 5).Abfrage Zeichenfolge param ist nicht URL-codiert in asp.net mvc Aktion

http://localhost:34162/Account/ResetPassword?code=BwEA181bAECFMcn1vwPdrctS/wcyncKPxGT9Zx1tDuPwKGpe9H1W7LI3Zm9fM+3aA5Fok5GhLPBHqbtiGfpL8Cmdx7RNC6RJ7d6t9ZgFBwgwYk3zssU1Nh64PWHJAabVG9Wv9VWDNdj+Fz0UA712XA== 

Dies ist die Adresse in meinem Browser.

jedoch im Debug erhalte ich diese Zeichenfolge im Resetpassword Aktion:

// GET: /Account/ResetPassword 
    [AllowAnonymous] 
    public ActionResult ResetPassword(string code) 
    { 
     return code == null ? View("Error") : View(); 
    } 

Der ‚Code‘ ist:

BwEA181bAECFMcn1vwPdrctS/wcyncKPxGT9Zx1tDuPwKGpe9H1W7LI3Zm9fM 3aA5Fok5GhLPBHqbtiGfpL8Cmdx7RNC6RJ7d6t9ZgFBwgwYk3zssU1Nh64PWHJAabVG9Wv9VWDNdj Fz0UA712XA== 

dh es wird nicht URL-codiert und natürlich Passwort nicht zurückgesetzt mit ungültiger Token-Nachricht.

Was kann ich tun, um die richtige Zeichenfolge in der Aktion zu erhalten?

Antwort

0

aussehen können zu kodieren, weiß ich immer noch nicht, was das Problem war. Sieht so aus, als hätte es gar nicht funktionieren sollen. Ich wünschte, ich wüsste, warum Microsoft das Bedürfnis verspürt, Tokens mit Schrägstrichen zu verwenden.

Wie dem auch sei, ich habe gerade Base64 codiert und decodiert das Token wie folgt:

bevor die E-Mail an den Benutzer zu senden:

...

  string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 

      code = CommonFuncs.Base64Encode(code); 

      EmailsBL.PasswordResetEmail(model.Email, code); <-- emailing the link for password rest to the user 

Und dann beim Empfang:

// POST: /Account/ResetPassword 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model) 
    { 
     ///////////////////////////////////////////////////////////////////// 
     // NOTE: if email is not CONFIRMED then reset password silently fails 
     //////////////////////////////////////////////////////////////////// 


     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     model.Code = CommonFuncs.Base64Decode(model.Code); 

dh Decodierung des Tokens. Das folgende ist

nur der Vollständigkeit halber:

public static string Base64Encode(string plainText) 
    { 
     string base64string = null; 
     if (plainText != null) 
     { 
      var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); 
      base64string = System.Convert.ToBase64String(plainTextBytes); 
     } 
     return base64string; 
    } 

    public static string Base64Decode(string base64EncodedData) 
    { 
     string decodedBase64String = null; 
     if (base64EncodedData != null) 
     { 
      var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); 
      decodedBase64String = System.Text.Encoding.UTF8.GetString(base64EncodedBytes); 
     } 
     return decodedBase64String; 
    }