ASP.NET (또는 IIS?)가 URL 인코딩 된 암호 텍스트 (404)를 승인 스크립트로 전달하는 대신 디코딩하는 것을 어떻게 피합니까?
-
06-09-2019 - |
문제
ASP.NET MVC에서 사용자가 SQL 멤버십 제공 업체를 사용하여 멤버십을 등록하는 웹 응용 프로그램을 작업하고 있습니다. 등록하면 시스템에 넣지 만 승인되지 않았습니다. 그런 다음 코드는 주어진 이메일을 사용하여 승인 이메일을 사용자에게 보냅니다.
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";
그러나 사용자가 링크를 클릭하면 다음 오류가 발생합니다.
설명 : HTTP 404. 귀하가 찾고있는 자원 (또는 그 종속성 중 하나)을 제거하거나 이름이 변경되었거나 일시적으로 사용할 수 없었을 수 있습니다. 다음 URL을 검토하고 철자가 정확한지 확인하십시오.
요청 된 url :/approve/k/9ihry43os =
문제는 링크를 보내기 전에 URL을 인코딩하는 경우 작업을 호출하려고하기 전에 왜 디코딩 되는가? 내 브라우저의 URL은 실제로 'http : // localhost : 1091/approve/k%2f9ihry43os%3d'오류가 발생할 때. 내 라우팅은 올바르게 설정되어 있지만 URL의 암호화 된 문자열에서 추가 '/'를 설명하지 않습니다 (어쨌든 거기에 없어서는 안됩니다.)
해결책
Urlencode를 사용하는 대신 Base64로 인코딩 할 수 있습니다.
제휴하지 않습니다 StackOverflow