¿Cómo evito que ASP.Net (o IIS?) Decodifica mi texto cifrado codificación URL (lo que resulta en un 404) en lugar de pasarlo a la secuencia de comandos Aprobar?
-
06-09-2019 - |
Pregunta
Estoy trabajando en un pedazo de una aplicación web en ASP.Net MVC, donde el usuario se registra para ser miembro utilizando un proveedor de pertenencia SQL. Cuando se inscriban se ponen en el sistema, pero no aprobados. El código a continuación, envía un correo electrónico de aprobación para el usuario con el correo electrónico dado.
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";
Sin embargo, cuando un usuario hace clic en el enlace que sale el siguiente error:
Descripción: HTTP 404. El recurso que busca (o una de sus dependencias) se podría haber quitado, haya cambiado de nombre o no está disponible temporalmente. Por favor, revise la siguiente URL y asegurarse de que esté escrita correctamente.
URL solicitada: / Aprobar / k / 9IHrY43os =
La pregunta es, si estoy de codificación URL del enlace antes de enviarlo, ¿por qué está decodificando antes de que intenta llamar a la acción? La url en el navegador es en realidad ' http: // localhost: 1091 / Aprobar / k% 2f9IHrY43os% 3d ' cuando me sale el error. Mi enrutamiento está configurado correctamente pero no tiene en cuenta el extra '/' en la cadena cifrada en la url (ya que no debería estar allí de todos modos.)
Solución
Se puede codificarlo como base 64 en lugar de utilizar URLEncode.