2009-05-25 5 views
11

C#의 WebRequest를 사용하여 사이트에 POST를 수행하려고합니다. 내가 게시하는 사이트는 SMS 사이트이고 messagetext는 URL의 일부입니다. URL의 공백을 피하기 위해 URL 인코딩을 위해 HttpUtility.Encode()를 호출합니다.WebRequest를 사용하여 "URI 형식을 확인할 수 없습니다."

하지만이 URIFormatException 점점 계속 - "잘못된 URI : URI를의 형식을 판별 할 수 없습니다"-이 비슷한 코드를 사용하는 경우 : 내가 호출 할 때

string url = "http://www.stackoverflow.com?question=a sentence with spaces"; 
string encoded = HttpUtility.UrlEncode(url); 

WebRequest r = WebRequest.Create(encoded); 
r.Method = "POST"; 
r.ContentLength = encoded.Length; 
WebResponse response = r.GetResponse(); 

예외가 발생이 WebRequest.Create를().

내가 뭘 잘못하고 있니?

답변

16

만 인수가 아닌 전체 URL을 인코딩, 그래서 시도해야합니다 :

string url = "http://www.stackoverflow.com?question=" + HttpUtility.UrlEncode("a sentence with spaces"); 

WebRequest r = WebRequest.Create(url); 
r.Method = "POST"; 
r.ContentLength = encoded.Length; 
WebResponse response = r.GetResponse(); 

를 전체 URL을 의미 인코딩 : //와? 너무 인코딩. 인코딩 된 문자열은 더 이상 유효한 URL이 아닙니다.

+0

[이 게시물] (http://stackoverflow.com/a/1148326/5838198)에서 논의 되었 듯이,'HttpUtility' 또는'Server' 메소드 대신'Uri.EscapeDataString()'을 사용하는 것이 가장 좋습니다 . – Siavas

1

UrlEncode는 쿼리 문자열에서만 사용해야합니다. 이 시도 :

string query = "a sentence with spaces"; 
string encoded = "http://www.stackoverflow.com/?question=" + HttpUtility.UrlEncode(query); 

는 코드의 현재 버전은 WebRequest 클래스를 혼동되는 URL에서 슬래시와 콜론에는 urlencoding된다.

관련 문제