WebClient() UploadString() method is receiving the following error "The remote server returned an error: (599)" incase the passed string contain <>

WebClient() UploadString() method is receiving the following error "The remote server returned an error: (599)" incase the passed string contain <>

我在 asp.net mvc-4 网络应用程序中遇到了这种奇怪的行为。现在我有以下 WebClient() 将字符串上传到外部 API:-

    var data = JsonConvert.SerializeObject(mainresourceinfo);
    using (WebClient wc = new WebClient()) 
                    {
                        string url = currentURL + "resources?AUTHTOKEN=" + pmtoken;
                        Uri uri = new Uri(url);
                        wc.Encoding = System.Text.Encoding.UTF8;
                        wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");

                        crudoutput = wc.UploadString(uri, "INPUT_DATA=" + HttpUtility.UrlEncode(data));
                    }

这是我要发送的 json object(在 url 根据 API 文档对其进行编码之前 url 对其进行编码json):-

INPUT_DATA="{\"operation\":{\"Details\":{\"RESOURCENAME\":\"test server 500123\",\"ACCOUNTNAME\":\"1\",\"RESOURCETYPE\":\"Windows\",\"PASSWORD\":\"<1234>\",\"NOTES\":null,\"Account Type\":null,\"RESOURCEURL\":null,\"OWNERNAME\":\"admin\",\"RESOURCEGROUPNAME\":\"other CUstomers\",\"DNSName\":\"-\",\"DEPARTMENT\":null,\"LOCATION\":null,\"RESOURCECUSTOMFIELD\":[{\"CUSTOMLABEL\":\"Asset Tag\",\"CUSTOMVALUE\":\"H1007228\"}],\"ACCOUNTCUSTOMFIELD\":[{\"CUSTOMLABEL\":\"Account Type\",\"CUSTOMVALUE\":\"domain\"}]}},\"createAccount\":{\"operation\":{\"Details\":{\"ACCOUNTLIST\":[]}}}}"

现在,如果我的 json object 包含具有以下字符 <> 的任何值,Web 客户端的 UploadString 方法将出现以下错误:-

System.Net.WebException occurred
  HResult=-2146233079
  Message=The remote server returned an error: (599).
  Source=System
  StackTrace:
       at System.Net.WebClient.UploadDataInternal(Uri address, String method, Byte[] data, WebRequest& request)
       at System.Net.WebClient.UploadString(Uri address, String method, String data)
       at System.Net.WebClient.UploadString(Uri address, String data)

另一方面,如果我在 Firefox RESTClient 调试器中 copy/paste 上述 json 字符串,并且在 RESTClient 工具中 运行 调用,则操作将正常进行。 ..

如果我从我的 asp.net WebClient 调用网络服务并且 json object 包含 <> 我会收到以下错误 The remote server returned an error: (599) 吗?在使用 FireFox 的 RESTClient 调试器使用相同的 json 字符串调用 Web 服务时可以正常工作吗?

最后说明,如果我的 json 字符串不包含这 2 个字符中的任何一个 <> 一切都会正常工作。

编辑

现在,当我使用 RESTCleint 工具向第 3 方 API 发出 Post 请求时,我可以看到来自第 3 方 API 的以下响应。我得到以下响应 header :-

Status Code: 200 OK
Cache-Control: no-store
Content-Type: text/html;charset=UTF-8
Date: Thu, 04 Aug 2016 15:29:37 GMT
Pragma: no-cache
Server: PMP
Set-Cookie: JSESSIONID=B9CA7B68CD5706C3B82FE925B3AB3244; Path=/; Secure; HttpOnly
Strict-Transport-Security: max-age=7776000; includeSubdomains
Transfer-Encoding: chunked

X-Frame-Options:同源

HTTP Status 500-599 表示问题出在服务器本身,而不是请求。

如果您可以看到 FireFox's RESTClient 生成的请求 headers,那么您可以将其与 WebClient 生成的请求进行比较,以帮助您隔离问题。

如果其他一切仍然相同,那么您只是在网络服务上发现了一个错误。