2011-05-13 3 views
2

호출해야하는 웹 서비스의 URL에는 자유 형식 텍스트가 포함 된 매개 변수가 포함됩니다. POST를 사용하여 전송되고 POST의 일부로 많은 필드가 포함되어 있기 때문에 왜 그렇게 설계되었는지는 잘 모르겠습니다. 그러나 그것은 나에게 문제를 일으키고있다.특수 문자로 잘린 HttpWebRequest의 URL

파운드 기호와 <>과 같은 일부 문자의 경우 URL은 문제가있는 문자에 부딪 힐 때 잘립니다. 매개 변수의 텍스트를 HTML로 인코딩하지만 문제가 남아 있습니다. >와 같은 특수 문자가 gt;와 같이 인코딩되어 있습니다. 인코딩 된 문자열의 세미콜론은 문제가 있다고 생각합니다.

들어오는 요청을받는 스니퍼를 서버에 놓았으며 URL이 잘 렸습니다. 해시 후

using System.Web; 
    .... 
    String strExtra="kjfkfjslkj#kfjkdlsfj"; 
    strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra); 
    HttpWebRequest oRequest = (HttpWebRequest)WebRequest.Create(new Uri(strURL)); 
    oRequest.Method = httpMethod; 
    oRequest.ContentType = "application/atom+xml"; 
    ... 
    using (WebResponse oResponse = oRequest.GetResponse()) 
    { 
    ... 
    } 

답변

7

모든 (#) : 코드는이 같은 것입니다

...?extraData=kjfkfjslkj#kfjkdlsfj 

:

...?extraData=kjfkfjslkj 

대신 : 서버에서

내가 좋아하는 무언가를보고 서명이 서버로 보내지지 않습니다. 페이지의 브라우저 나 스크립트에서 페이지의 위치 또는 다른 의미를 나타내는 데 사용됩니다. 해시 기호를 제거하거나 URL 인코딩 ( %23)하여 서버로 보냅니다.

라인이 :에 URL의 데이터를 사용하는 경우

strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra); 

은 HTML 용

strURL = strStuff + "?extraData=" + Server.UrlEncode(strExtra); 

인코딩되어야 소용이다.

+1

예. 그것은 나를 위해 일했다. 유일한 차이점은 내가 System.Web.HttpUtility.UrlEncode()를 사용했다는 것입니다. – George

+0

'Page.Server' 속성은'HttpServerUtility' 타입이고'UrlEncode' /'UrlDecode' 메소드는 실제로 호출을'HttpUtility '에 전달합니다. UrlEncode' /'HttpUtility.UrlDecode', 당신이 좋다. –

+1

System.Web.HttpUtility.UrlEncode가 해시 기호를 제거하지 않습니다. – Ted

관련 문제