2

添付データを取得するために GET を実行する REST Web サービスを呼び出しています。受け取るパラメーターは、SRNumberExternal_IdattachmentId、およびattachmentNameです。ブラウザーで機能する特定の呼び出し URL がありますが、コードからサービスを呼び出すと機能しません。特に私がテストしているものには、次のパラメーターがあります。

  • SR 番号= 1000
  • ExternalId = USERID7/27/2012 10:43:00 AM
  • 添付ファイルID = 1-2H1USPQ
  • attachmentName = ここにファイル名が入ります

URL エンコードされたパラメーターでフォーマットされた URL は次のとおりです。

http://baseurl/service/CHD/Service_Record_Attachment_Query/SRNumber/1000/External_Id/USERID7%2F27%2F2012%2010%3A43%3A00%20AM/attachmentId/1-2H1USPQ/attachmentName/File%20name%20goes%20here/

ただし、コードを介して GET を実行しようとすると、エラーが発生します。Web サービスは、URL でエンコードされた「/」文字を URL の区切り文字であるかのように読み取っているようです (コードをステップ実行して、文字列が作成されたときに、External_Id の「/」が URL エンコードされていることを確認しました)。 .)

URL文字列を作成するために使用しているコードは次のとおりです。

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 を作成します。

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

次に、「USERID7」のみを検索し、残りの添付ファイル名を除外しているため、添付ファイルが存在しないというエラーが返されます。

「/」文字が区切り文字として解釈される可能性があるコードで何か間違ったことをしていますか? ブラウザーに呼び出し URL を入力すると成功の応答が返される理由がわかりませんが、コードを介して同じ呼び出し URL を使用するとエラーが返されます。

4

1 に答える 1

2

Fiddlerなどのツールを使用して、ブラウザーとコード ケースでネットワーク ワイヤを実際に通過しているものを確認します。ブラウザが URL の「/」文字を二重にエスケープしている可能性があります。または、コードが意図したとおりにエスケープしていない可能性があります。ネットワーク上の HTTP リクエストを見ると、多くのことがわかるはずです。

于 2012-11-14T00:25:56.110 に答える