Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SSIS.net url编码_C#_Ssis_Httpclient_.net 4.5_Dotnet Httpclient - Fatal编程技术网

C# SSIS.net url编码

C# SSIS.net url编码,c#,ssis,httpclient,.net-4.5,dotnet-httpclient,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脚本任

我需要一些关于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请求:

得到

来自.Net控制台应用程序的URl请求(正确的):

得到

引用的.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;
}

您是否对其进行了代码步进,以便确定是GetAsync()方法消除了它?如果出现问题,您是在SSDT中运行SSIS包还是在服务器上运行SSIS包?.NET Framework 4.5不推荐使用--请参见.NET Blog>支持结束.NET Framework 4,4.5和4.5.1:HttpClient由nuget发布--Microsoft.NET Framework 4 HTTP客户端库:。我认为有足够的空间让不同的版本链接进来。感谢Richard的回复。回答你的问题:是的,我使用fiddler编写了代码并捕获了流量。GetAsync()方法将%2F替换为我们的prod服务器中的错误,然后我们开始在SSDT中进行调试,其行为与此相同。是的,HttpClient来自Nuget。您是否对其进行了代码步进,以便可以确定它是GetAsync()方法避免了它?当它出错时,您是在SSDT中运行SSIS包还是在服务器上运行SSIS包?.NET Framework 4.5不推荐使用--请参阅.NET博客>支持结束.NET Framework 4,4.5和4.5.1:HttpClient由nuget发布--Microsoft.NET Framework 4 HTTP客户端库:。我认为有足够的空间让不同的版本链接进来。感谢Richard的回复。回答你的问题:是的,我使用fiddler编写了代码并捕获了流量。GetAsync()方法将%2F替换为我们的prod服务器中的错误,然后我们开始在SSDT中进行调试,其行为与此相同。是的,HttpClient来自Nuget。