我需要SSIS脚本任务中的URL编码方面的帮助。
问题:
当我从SSIS脚本任务调用.net dll(具有编码逻辑)时,URL编码无效。但是,当我从.net控制台项目调用相同的dll时,可以正常工作。
说明
我已经构建了一个.net函数,它是我在SSIS脚本任务中引用的dll的一部分。
这个.net函数接受一个字符串值作为参数并构建一个uri。我url编码参数值,因为它有特殊字符,在这种情况下它是/(正斜杠)。
当我在.net控制台应用程序中引用此函数时,url编码按预期工作。但是当我在SSIS脚本任务中引用同一个模块时,/不会被编码。目标框架是4.5(在.net dll和SSIS脚本任务中)
从以下代码生成的Http请求:
来自SSIS脚本任务的URl请求:
获取https://api-servername.net/client/office/Raleigh+Addr%3a+AFO-613/618/custom-data
来自.Net控制台应用程序的URl请求(正确的):
获取https://api-servername.net/client/office/Raleigh+Addr%3a+AFO-613%2f618/custom-data
引用的.Net DLL代码:
public void GetLCDClientOffice(string officename)
{
using (var client = BuildClient())
{
var url = String.Format("{0}/{1}/{2}"
, this.ResourceName
, this.OFFICE_PATH
, Uri.EscapeDataString(officename));
var uri = new Uri(ServiceUri, url);
string url1 = ServiceUri.ToString() +
String.Format("{0}/{1}/{2}",this.ResourceName
, OFFICE_PATH, System.Web.HttpUtility.UrlEncode(officename));
// Get Async unescapes %2F back to / when called from from SSIS script task but works from .net console project
var response = await client.GetAsync(uri);
var response = await client.GetAsync(url1); // same behavior
// do something with response
}
}
public HttpClient BuildClient()
{
var client = new HttpClient();
client.Timeout = new TimeSpan(0, 30, 0);
return client;
}