SSIS .net url编码

时间:2016-05-10 18:34:22

标签: c# ssis httpclient .net-4.5 dotnet-httpclient

我需要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;
}

0 个答案:

没有答案