Dynamics 365 Online:在网址

时间:2018-04-24 19:43:23

标签: c# rest api webclient-download

好的,所以这让我忙得太久了。使用Chrome中的SOAPUI或Restlett测试api调用我可以获得预期的结果 - 代表pdf或可能html的二进制文件。我用黄色突出显示了有问题的Url部分(这确实代表了应该下载的文档编号,在父系统中是“ 130318 / HJRWIQ ”但我们不能使用{{1在网址中,因此在web-api调用中 130318%2FHJRWIQ 表示相同的内容。

Chrome Restlett Api测试结果 Chrome - RestLet Api test

现在,尝试在c#中执行相同操作,此url返回'

  

404未找到

我怀疑%2F以某种方式再次编码回'/'。 以下是我尝试的两种不同的方法(两者都做同样的):

c#方法下载相同的响应;

'/'

根据上述记录的异常:

  

下载数据异常:   远程服务器返回错误:(404)Not Found。

只需忽略字符串构建器和跟踪(这用于远程调试),因为它在线运行。

其他人之前遇到过这种情况?如何正确传递internal static string DownloadData(string resourceUrl, string authorizationApi, StringBuilder sb) { using (var wc = new WebClient()) { // copy data to byte[] wc.Headers.Add("Content-Type", "application/pdf"); wc.Headers.Add("Authorization", authorizationApi); wc.Headers.Add("OData-MaxVersion", "4.0"); wc.Headers.Add("OData-Version", "4.0"); var data = wc.DownloadData(new Uri(@resourceUrl)); sb.AppendLine(" url used\t" + wc.BaseAddress); sb.AppendLine(" querystring value\t" + wc.Encoding); return Convert.ToBase64String(data); } } internal static string DownloadData(string resourceUrl, string authorizationApi, ITracingService trace) { try { using (var wc = new WebClient()) { wc.Headers.Add("ContentType", " text/plain"); wc.Headers.Add("Authorization", authorizationApi); //wc.Headers.Add("Content-Disposition", "attachment; filename='82400200813_-doc.pdf'"); //wc.Headers.Add("Transfer-Encoding", "chunked"); return wc.DownloadString(new Uri(@resourceUrl)); } } catch (Exception e) { trace.Trace("DOWNLOAD DATA EXCEPTION: \n" + e.Message + "\n" + e.InnerException); } return ""; }

修改 即使MS再现了这个并且没有解决方法的答案 - 我将此代码移动到一个可以独立获取并将结果传回的天蓝色服务;

0 个答案:

没有答案