Come evitare che ASP.Net (o IIS?) Decodifica il mio testo cifrato con codifica URL (risultante in un 404) invece di passare allo script Approvare?

StackOverflow https://stackoverflow.com/questions/578548

Domanda

Sto lavorando su un pezzo di un'applicazione web in ASP.Net MVC in cui l'utente si registra per l'adesione utilizzando un provider di appartenenze SQL. Al momento della registrazione sono messi nel sistema, ma non approvati. Il codice quindi invia una e-mail di approvazione per l'utente con l'e-mail specificato.

BfEncrypt refid = new BfEncrypt();
refid.Encrypt(user.ReferenceID);
string code = HttpContext.Current.Server.UrlEncode(refid.CipherText);
    ...
Body += "<a href=\"http://localhost:1091/approve/" + code + "\">Approval Link</a>\n\r\n\r";

Ma quando un utente fa clic sul link che ottengono il seguente errore:

  

Descrizione: HTTP 404. La risorsa che si sta cercando (o una delle sue dipendenze)   avrebbe potuto essere rimossa, aver cambiato nome, o è temporaneamente non disponibile.   Si prega di rivedere il seguente URL e assicurarsi che sia stato digitato correttamente.

     

URL richiesto: / Approva / k / 9IHrY43os =

La domanda è: se io sono URL che codifica per il collegamento prima che io lo mando, perché sta decodificando prima che tenta di chiamare l'azione? L'URL nel browser è in realtà ' http: // localhost: 1091 / Approva / k% 2f9IHrY43os% 3d ' quando ottengo l'errore. Il mio percorso è configurato correttamente, ma non tiene conto per l'extra '/' nella stringa crittografata nell'URL (dato che non dovrebbe essere lì comunque.)

È stato utile?

Soluzione

Si potrebbe codificare come Base64 invece di utilizzare URLEncode.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top