2013-04-18 1 views
0

클래스 라이브러리에서이 메서드를 사용하고 컨트롤러에서 메서드를 호출했습니다. 하지만 전달 된 값은 인코딩이 아닙니다. 나는 그 이유를 추적 할 수 없다.URL 매개 변수를 어떻게 인코딩 할 수 있습니까?

클래스 라이브러리

using System.Web; 

public static class CommonLogic  
{ 
    public static string UrlEncode(string value) 
    { 
     return HttpUtility.UrlEncode(value); 
    } 
} 

컨트롤러

var test = CommonLogic.UrlEncode("2") 

테스트 값은 "2"이고, 그렇지 인코딩.

업데이트 :

난 그냥 아래 설명에서 이유를 깨달았다. 정말 필요한 것은 인코딩이 아니라 암호화와 해독입니다. URL 매개 변수를 일반 텍스트로 표시하지 않고 암호화 된 값으로 지정하고 나중에 컨트롤러에서 해당 값을 처리하기 전에 다시 해독합니다. 이것에 대한 아이디어가 있습니까?

+1

인코딩 된 후에도 여전히 "2"입니다. 뭔가 다른 걸 기대하고 있니? 그렇다면, 무엇? –

+0

아, 그냥 URL의 특수 문자 만 인코딩한다는 것을 깨달았습니다. 내가 정말로 원하는 것은 2라는 값을 사용자 테이블의 기본 키로 인코딩하고 Url에 노출시키지 않기 위해서입니다. 대신 나는 그것을 인코딩 된 가치가 필요합니다. 다른 방법이 있습니까? –

+0

어떻게 (어떤 방식으로) 인코딩하려고합니까? –

답변

0

"2"는 UrlEncoded 일 필요가 없습니다. URL에 예약 된 기호가 아닙니다. "<"과 같은 문자열을 테스트 해보십시오.

+0

+1을했습니다. @ zespri 코멘트에 대한 내 코멘트를 볼 수 있습니까? –

+0

맞습니다. 실제로 원하는 것을 설명하기 위해 질문을 다시 작성해야합니다. 나는 당신이 실제로 사이트를 가로 질러 이동하는 것처럼 사용자 세션을 유지하려고한다면 엔티티 나 세션 데이터에 대해 저장된 것을 변경하려고한다면 실제로 어느 쪽의 게시물을 사용하고 싶은지를 요청한다고 생각합니다. . 나는 너와 얼마나 멀리 있는지 알지 못한다. 그래서 나는 이것이 기분을 상하게하지 않기를 바라지 만, 세션과 쿠키를 읽는 것과 같은 소리가 들릴 수 있겠는가? – wewals

+0

GET 방법을 사용합니다. 하지만 URL에 값을 암호화하고 일반 값으로 노출해서는 안됩니다. –

0

문자 "2"RFC3986 https://tools.ietf.org/html/rfc3986#section-2.3

항에 설정된 "제한없이"의 일부인 "제한없이"%를 부호화 할 필요가 없다.

URL에 노출되는 것에 관한 의견 : 인코딩은 이 아니며 암호화입니다. URL에 정수 사용자 ID를 표시하지 않으려면 노출 할 수있는 다른 고유 식별자가 사용자에게 필요합니다. 예를 들어 사용자 테이블에서 고유 한 임의의 문자열 (youtube.com에서 동영상을 식별하는 것과 유사) 또는 GUID.

것은 RijndaelManaged 사용하여 C#으로 간단한 대칭 암호화 작업을 수행하는 방법의 예 : Simple insecure two-way "obfuscation" for C#

당신은 암호화 키의 비밀을 유지해야합니다.

0

UrlEncode 메서드의 목적은 문자열을 URL에서 사용할 수있는 형식으로 변환하는 것입니다. "2"는 이미 URL에서 사용될 수 있으므로이 URL은 null 변환이므로 "2"와 동일한 값이됩니다.

Section 2 of RFC 3986은 URL의 일부가되기 위해 인코딩해야하는 문자를 대략적으로 설명합니다.

+0

내 질문이 업데이트되었습니다. –

관련 문제