2012-11-13 4 views
2

일부 첨부 파일 데이터를 얻기 위해 GET을 수행하는 REST 웹 서비스를 호출하고있다. 매개 변수는 SRNumber, External_Id, attachmentIdattachmentName입니다. 브라우저에서 작동하는 특정 호출 URL이 있지만 코드를 통해 서비스를 호출 할 때는 작동하지 않습니다. 특히 하나 내가 시험은 다음과 같은 매개 변수가있어 :브라우저에서 REST 웹 서비스를 호출하면 코드가 달라진다.

  • SRNumber을/2012 = 1000
  • 외부 ID = USERID7/27 오전 10시 43분 0초
  • attachmentId = 1 2H1USPQ
  • ATTACHMENTNAME = 파일 이름은 여기
,536,913 간다 63,210

여기 URL 인코딩 된 매개 변수로 포맷 된 URL입니다 :

에 http : // base을/서비스/CHD/Service_Record_Attachment_Query/SRNumber/1000/EXTERNAL_ID/USERID7 % 2F27 % 2F2012 %의 2,010퍼센트 3A43 % 3A00 %의 20AM/attachmentId/1-2H1USPQ/attachmentName/파일 % 20name % 20goes % 20here/

코드를 통해 GET을 시도하면 오류가 발생합니다. 웹 서비스가 URL 인코딩 된 '/'문자를 URL의 구분 기호 인 것처럼 읽는 것으로 나타납니다 (문자열이 작성되었을 때 External_Id의 '/'가 URL 인코딩되었음을 확인하는 코드를 밟았습니다. .)

여기에 내가 빌드에게 URL 문자열 사용하고 코드입니다 : 내가 얻을 다음

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestURL); 

: 요청 문자열을 구축 한 후

requestURL = ConfigurationManager.AppSettings["Server"] + 
    ConfigurationManager.AppSettings["Service"] + 
    "Service_Record_Attachment_Query/SRNumber/" + 
    System.Uri.EscapeDataString(SRNumber) + "/External_Id/" + 
    (ExternalID.Equals(null) ? "" : System.Uri.EscapeDataString(ExternalID)) + 
    "/attachmentId/" + System.Uri.EscapeDataString(AttachmentID) + 
    "/attachmentName/" + System.Uri.EscapeDataString(AttachmentName) + "/"; 

을, 나는 HttpWebRequest를을 만들 것을 사용 첨부 파일이 존재하지 않는다고 말하는 오류는 'USERID7'만 검색하기 때문에 "라고 표시하고 나머지 첨부 파일 이름은 제외합니다.

내 코드에서 '/'문자가 구분 기호로 해석 될 수있는 오류가 있습니까? 브라우저에 호출 URL을 넣을 때 성공한 응답을 반환하는 이유를 이해할 수 없지만 코드를 통해 동일한 호출 URL이 오류를 반환합니다.

+0

대상 웹 서버, IIS, Apache는 무엇입니까? –

+0

@CarlosLande, 대상 웹 서버는 IBM HTTP Server입니다. – Poosh

답변

2

Fiddler과 같은 도구를 사용하면 브라우저 및 코드 케이스에서 실제로 네트워크 선을 통과하는 것을 볼 수 있습니다. 브라우저가 URL에서 '/'문자를 두 번 이스케이프 처리하고 있거나 코드가 생각한대로 이스케이프 처리하지 않을 수 있습니다. 유선에서 HTTP 요청을 보면 많은 것을 알 수 있습니다.

+0

큰 도움을 주셔서 감사합니다! '/'및 '.'과 (과) 유사합니다. 내가 예상 한대로 문자가 이스케이프되지 않았습니다. String 대신 요청을 만들 때 Uri 클래스를 사용하여 이스케이프 처리 된 '/'문자를 허용하지 않는이 해결 방법을 사용합니다. [URL 인코딩 된 슬래시가있는 URL 얻기] (http://stackoverflow.com/ questions/781205/getting-a-url-with-an-url-encoded-slash)를 추가하고이 해결 방법을 추가했습니다.'문자가 구분 기호 앞에 표시됩니다. [끝에있는 점이있는 URL에 HttpWebRequest] (http://stackoverflow.com/questions/856885/httpwebrequest-to-url-with-dot-at-the-end) – Poosh

관련 문제