Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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# 在mono上获取带有转义斜杠的Uri_C#_Mono_Uri_Webrequest - Fatal编程技术网

C# 在mono上获取带有转义斜杠的Uri

C# 在mono上获取带有转义斜杠的Uri,c#,mono,uri,webrequest,C#,Mono,Uri,Webrequest,更新:一个修复程序现已进入。这是个好消息 更新:添加了修复片段处理的逻辑 我试图使用Uri类在Mono上发送带有编码斜杠的请求。这基本上是单声道的等价物: 问题是,与.NET类似的Mono在构建Uri时,将取消其在Uri中找到的任何斜杠。此逻辑最初是为了消除路径进行转义编码而未被检测到时可能出现的漏洞 在前一篇文章中,有一个黑客通过反射在底层Uri类上设置标志,这迫使转义的斜杠被忽略。这种行为在.NET4.5中已经修复,默认情况下允许转义斜杠(正如我在评论中提到的) 我试图在Mono上做同样的事

更新:一个修复程序现已进入。这是个好消息

更新:添加了修复片段处理的逻辑

我试图使用Uri类在Mono上发送带有编码斜杠的请求。这基本上是单声道的等价物:

问题是,与.NET类似的Mono在构建Uri时,将取消其在Uri中找到的任何斜杠。此逻辑最初是为了消除路径进行转义编码而未被检测到时可能出现的漏洞

在前一篇文章中,有一个黑客通过反射在底层Uri类上设置标志,这迫使转义的斜杠被忽略。这种行为在.NET4.5中已经修复,默认情况下允许转义斜杠(正如我在评论中提到的)

我试图在Mono上做同样的事情,但是失败了,因为Uri类的内部结构不同。我想出了这个方法来实现我想要的东西,虽然有效,但它非常粗糙

班级计划 { 静态void Main(字符串[]参数) { var uri=新uri(“”); ForceCanonicalPathAndQuery(uri); Console.WriteLine(“uri.ToString()-”+uri.ToString()); Console.WriteLine(“uri.AbsoluteUri-”+uri.AbsoluteUri); Console.WriteLine(“uri.Host-”+uri.Host); Console.WriteLine(“uri.Query-”+uri.Query); Console.WriteLine(“uri.PathAndQuery-”+uri.PathAndQuery); Console.WriteLine(“uri.AbsolutePath-”+uri.AbsolutePath); Console.WriteLine(“uri.Fragment-”+uri.Fragment); }

}

运行此操作时,它会输出以下内容:

uri.ToString() - http://www.yahoo.com/%2F?Foo=Bar%2F#frag
uri.AbsoluteUri - http://www.yahoo.com/%2F?Foo=Bar%2F#frag
uri.Host - www.yahoo.com
uri.Query - ?Foo=Bar%2F
uri.PathAndQuery - /%2F?Foo=Bar%2F
uri.AbsolutePath - /%2F
uri.Fragment - #frag
我对它一点也不满意,但它确实有效,至少在获取Uri并发出查询的基本场景中是如此


我可能缺少Uri类中的某些内容,因此如果您有更好/更少的方法来完成我在这里所做的工作,我将非常感激。

从最初的问题来看,似乎MS.NET的行为在.NET 4.5中发生了更改,以修复此错误


事实上,mono没有遵循.NET4.5配置文件中的行为变化是一个bug。似乎有人已经修复了这个bug并提出了一个pull请求,问题是Mono团队中似乎没有人抽出时间来审查它:

我没有提交原始问题,我只是发现它在4.5中得到了修复,并添加了一条注释:-)我确实向xamarin()提交了一个bug,并与Miguel进行了交谈。我认为问题在于,它不会被修补到mono的早期版本,因为这与.NET不一致,但希望它能被修复到mono 3.x。我从来没有提议过修复所有mono配置文件,您可以将错误修复代码嵌入到其类库上的NET_4_5定义下,以便仅在.NET 4.5 Profile Hi Knocte中修复错误,同意,谢谢!我提交的bug是为了修复4.5配置文件。你知道如何以一种不太老套的方式来实现我上面的建议吗?不太老套的方式显然是在mono中修复bug,而不是求助于reflectionHa-ha,好吧,它不被认为是4.5之前的bug;-)这是故意的。我的意思是如果有其他方法阻止修复。
uri.ToString() - http://www.yahoo.com/%2F?Foo=Bar%2F#frag
uri.AbsoluteUri - http://www.yahoo.com/%2F?Foo=Bar%2F#frag
uri.Host - www.yahoo.com
uri.Query - ?Foo=Bar%2F
uri.PathAndQuery - /%2F?Foo=Bar%2F
uri.AbsolutePath - /%2F
uri.Fragment - #frag