Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# WCF拒绝URL数据中冒号为“400错误请求”的请求_C#_Wcf_Urlencode_Url Encoding_Self Hosting - Fatal编程技术网

C# WCF拒绝URL数据中冒号为“400错误请求”的请求

C# WCF拒绝URL数据中冒号为“400错误请求”的请求,c#,wcf,urlencode,url-encoding,self-hosting,C#,Wcf,Urlencode,Url Encoding,Self Hosting,我正在尝试使用一个自托管WCF服务做一些非常简单的事情,我简直不敢相信我花了半天的时间才让它工作 我有一个用于以下端点的模板 [WebGet(UriTemplate="{documentName}?catalog={catalog}")] DocData FindJobInfo(string documentName, string catalog); 当我试图用docuementName参数中有冒号的URL点击它时,它会以400错误请求错误拒绝对它的请求。一个实际的例子如下: http://

我正在尝试使用一个自托管WCF服务做一些非常简单的事情,我简直不敢相信我花了半天的时间才让它工作

我有一个用于以下端点的模板

[WebGet(UriTemplate="{documentName}?catalog={catalog}")]
DocData FindJobInfo(string documentName, string catalog);
当我试图用docuementName参数中有冒号的URL点击它时,它会以400错误请求错误拒绝对它的请求。一个实际的例子如下:

http://localhost:59982/dms/:Q9:m:w:x:h:~140410145342551.nev?catalog=test
对于那些想说URL编码的人。此请求也会失败:

http://localhost:59982/dms/%3AQ9%3Am%3Aw%3Ax%3Ah%3A~140410145342551.nev?catalog=test
然而。。。如果我用分号替换documentName中的所有冒号。。。它的工作原理是:

http://localhost:59982/dms/;Q9;m;w;x;h;~140410145342551.nev?catalog=test
到底是什么?此外,第一个URL格式应该可以正常工作,因为我可以使用相同的文档名和冒号以及其他名称访问供应商的站点,并且工作正常。我甚至尝试将以下内容添加到web.config中,但仍然不起作用:

<system.web>
  <httpRuntime requestPathInvalidCharacters="" />
  <compilation debug="true" targetFramework="4.0" />
</system.web>

这是一个确切的休息电话,公司名称更改为隐私。从该端点检索数据时没有问题。我不明白为什么他们会选择这样一个看起来疯狂的ID来处理他们的资源。但他们做到了,这对他们来说很有效。为什么我不能让我的端点接受它们。

该问题是由ASP.NET/IIS设置引起的。作为标准,出于某些安全和机制原因,URL中不允许使用以下字符:

* % : & \ 如前所述,您可以允许使用所有字符,也可以只删除冒号字符,如下所示:

requestPathInvalidCharacters="<,>,*,%,&,\"

你可以在Scott Hanselman的博客上阅读更多关于这种行为的信息和风险。

我在问题陈述中提到我已经尝试过了。我甚至提供了我在.config文件中使用的XML。我不知道你怎么会错过,但这对我不起作用。不过,我应该提到,我使用的是自托管WCF服务,而不是IIS。不确定这是否重要,但我会将此信息添加到问题描述中。可能这些供应商端点不是WCF REST服务,因此它们工作的事实与您的问题无关。你有没有看过你的文档/源代码?我相信他们提供的对URL的支持是非常有限的,因为你是自我托管的,我相信你的配置中的部分将会是ignored@Schneider我非常怀疑供应商是否在使用WCF托管他们的产品API。另外,是什么让您认为在自托管时会忽略这些内容?这也许可以解释一些事情,但你以前在哪里见过这个?对不起,我想到的是system.webServer
requestPathInvalidCharacters="<,>,*,%,&,\"