2013-06-06 1 views
1

에서 인코딩 PARAMS을 건너 뛰려면 어떻게 간단한 규칙이있다. aspx ");는 ASP.NET의 경로 내 ASP.NET의 WebForm에 응용 프로그램에서

string searchText = "текст"; 
string url = Page.GetRouteUrl("RouteSearchSimple", 
      new 
      { 
       SearchText = searchText 
      }); 

GetRouteUrl가 자동으로 검색 텍스트 값을 인코딩하고 결과 URL =/검색/% D1 %의 82 % "검색 텍스트는"PARAM 내가 그래서 내가 사용하는 URL을 생성, 키릴 단어를 사용할 필요로

D0 %의 B5 %의 D0의 %의 BA의 %의 D1 %의 81 % D1 %의 82

하지만 내가 필요 ->/검색/текст이 가능 Page.GetRouteUrl 기능으로 그걸 얻기 위해 얼마나

.

고맙습니다.

+1

귀하의 질문에 "어떻게 잘못된 URL을 생성하기를"인가? Uri의 경로에는 비 ASCII 문자가 포함될 수 없습니다. http://www.ietf.org/rfc/rfc3986.txt –

+1

사실 모든 브라우저에서 8 년 전의 문서를 가리킬 수 있습니다 – ihorko

+1

링크를 제공 하시겠습니까? 새 문서에? "브라우저에서 주소에 인코딩되지 않은 Url을 표시하는 것"에 대해 이야기하고있을 수도 있지만 잘못되었거나 인코딩되지 않은 비 ASCII 텍스트를 경로 부분에 지정하는 방법을 지정하는 문서를 보게되어 기쁩니다. –

답변

0

자, 답장을 보내 주셔서 감사합니다. 간단한 대답은 Page.GetRouteUrl() 함수로는 불가능합니다. Request.Params 나 .QueryString에 개발자가 가지고있는 것처럼 인코딩/디코딩 매개 변수를 사용하는 방법으로 개발되지 않았거나 개발자가 제어 할 수있는 대체 라우팅 기능이 될 수 없다는 것은 매우 이상한 일입니다.

string param = "текст"; 
string url = "/search/" + param; 
:

string url = (System.Web.Routing.RouteTable.Routes["RouteSearchSimple"] as System.Web.Routing.Route).Url.Replace("{SearchText}", "текст"); 

또는 간단한 방법은 단지 문자열 연결을 통해 URL을 만드는 :처럼 내가 찾은

한 가지 방법은 RouteTable에서 URL을 받고 수동으로 분석되어, 내 경우는 것

내가 이미 한 일이지만이 경우 경로 URL을 변경하면 나타나는 모든 장소에서 코드를 변경해야하므로 한 곳에서 GetSearchUrl (string searchText)과 같은 정적 함수를 만드는 것이 좋습니다.

그리고 그것은 매력처럼 작동합니다. Url은 사람이 읽을 수있는 것처럼 보이고 RouteData를 통해 params를 읽을 수 있습니다.

2

사실, 나는 Alexei Levenkov가 대답에 가깝다고 생각합니다. 궁극적으로 URL에는 ASCII 문자 만 포함될 수 있으므로 영숫자 문자 이상은 공백과 같은 URL 인코딩으로 인코딩됩니다.

지금까지는 ASCII가 아닌 문자를 표시하는 브라우저가 있지만 브라우저의 구현에 달려 있습니다 (배경은 인코딩을 계속 수행함). 그러나 GetRouteUrl은 URL에 대한 요구 사항이므로 항상 ASCII 인코딩 형식을 반환합니다.

(제쳐두고, "일부 8 살짜리 문서는"URL을 정의와는. Tim Berners Lee에 의해 쓰여진 것. 그는 인터넷에 영향을 조금했다.)

때문에

업데이트 너는 나에게 관심을 가지기를, 나는 조금 더 연구를했다. 마치 Internationalized Domain Names 인 것처럼 보입니다. 그러나이 기사에서 내가 이해하고있는 바에 따라 ToASCII 또는 ToUnicode가 이름 아래에 적용됩니다. 자세한 내용은 RFC 3490에서 확인할 수 있습니다. 그래서, 다시, 당신은 여전히 ​​같은 시점에 있습니다. 자세한 내용은 Stackoverflow question에서 확인할 수 있습니다.

0

가장 간단한 해결책은 UrlDecode 방법으로 디코딩하는 값 :

string searchText = "текст"; 
    string url = Page.GetRouteUrl("RouteSearchSimple", 
      new 
      { 
       SearchText = searchText 
      }); 
    string decodedUrl = Server.UrlDecode(url); // => /search/текст