Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# 潜在危险的请求。从客户端(*)检测到路径值_C#_Asp.net_Url_Routing_Webforms - Fatal编程技术网

C# 潜在危险的请求。从客户端(*)检测到路径值

C# 潜在危险的请求。从客户端(*)检测到路径值,c#,asp.net,url,routing,webforms,C#,Asp.net,Url,Routing,Webforms,我收到了一个不言自明的错误: 潜在危险的请求。从客户端(*)检测到路径值 该问题是由于请求URL中的*引起的: https://stackoverflow.com/Search/test*/0/1/10/1 此url用于填充搜索页面,其中“test*”是搜索词,url的其余部分与各种其他过滤器相关 有没有一种简单的方法允许URL中使用这些特殊字符?我试图修改web.config,但没有效果 我应该手动编码/解码特殊字符吗? 或者有没有这样做的最佳实践,我想避免使用查询字符串。-但这可能是一种选

我收到了一个不言自明的错误:

潜在危险的请求。从客户端(*)检测到路径值

该问题是由于请求URL中的
*
引起的:

https://stackoverflow.com/Search/test*/0/1/10/1
此url用于填充搜索页面,其中“test*”是搜索词,url的其余部分与各种其他过滤器相关

有没有一种简单的方法允许URL中使用这些特殊字符?我试图修改
web.config
,但没有效果

我应该手动编码/解码特殊字符吗? 或者有没有这样做的最佳实践,我想避免使用查询字符串。-但这可能是一种选择


该应用程序本身是一个
c#asp.net
webforms应用程序,它使用路由生成上述漂亮的URL。

您应该对路由值进行编码,然后(如果需要)在搜索之前解码该值

URL路径中不允许使用
*
字符,但在查询字符串中使用它没有问题:

http://localhost:3286/Search/?q=test*
这不是一个编码问题,
*
字符在URL中没有特殊意义,因此不管您是否对其进行URL编码。您需要使用不同的方案对其进行编码,然后对其进行解码

例如,使用任意字符作为转义字符:

query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");
和解码:

query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");

如果您使用的是.NET 4.0,您应该能够通过web.config允许这些URL

<system.web>
    <httpRuntime 
            requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" />
</system.web>

注意,我刚刚删除了星号(*),原始默认字符串是:

<httpRuntime 
          requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?" />


有关更多详细信息,请参阅。

此异常发生在我的应用程序中,具有误导性

它是在我使用ajax方法调用调用.aspx页面Web方法并传递JSON数组对象时抛出的。网页方法签名包含强类型.NET对象OrderDetails的数组。 Actual_Qty属性定义为int,JSON对象Actual_Qty属性包含“4”(额外空格字符)。
在删除额外空间后,转换成为可能,通过ajax调用成功地访问了Web页面方法。

在处理统一资源定位器(URL)时,有一些特定情况,在这种特定情况下,我们处理的是保留字符

最多,保留字符可以(也可以不)通过通用语法、每个特定于方案的语法或URI的解引用算法的特定于实现的语法定义为分隔符;星号(*)是保留字符

最佳实践是在URL中使用,或者您可以尝试对其进行编码

继续挖掘:


如果是IIS Express,请尝试将web project的服务器属性设置为本地IIS。确保项目url是否正确并创建虚拟目录。

对于我来说,我正在使用web api 2.0开发.net 4.5.2, 我也有同样的错误,我只是通过添加requestPathInvalidCharacters=“”来设置它 在requestPathInvalidCharacters中,必须设置不允许的字符,否则必须删除导致此问题的字符

<system.web>
     <httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
     <pages  >
      <namespaces>
     ....
 </namespaces>
    </pages> 
  </system.web>
这就解决了当我们编码时的问题&并将其重新放置在url上%26 无论如何,在服务器上,我们收到了正确的参数Digital&Mckinsey

此链接可能有助于设计RESTWebAPI的最佳实践

对我来说,在键入url时,用户不小心使用了/而不是?启动查询参数的步骤

e、 g:

url.com/endpoint/parameter=SomeValue&otherparameter=other+value

应该是:

url.com/endpoint?parameter=SomeValue&otherparameter=other+value


我在Azure数据工厂中遇到了一个类似的问题:角色

我通过用%3A替换:解决了问题

如图所示

例如,我替换了

date1=2020-01-25T00:00:00.000Z


您的页面顶部是否有
ValidateRequest=false
?我不知道网站内部尝试重定向的原因是什么,该重定向创建了一个类似“”的URL,这给了我相同的错误。我不知道为什么ASP.net管道认为它是一个危险的请求URL。感谢您的回复。你的意思是对*之类的项目进行有效替换,然后在阅读时将其替换回来吗?你能给出一个编码和解码值的代码示例吗?有没有办法在操作中使用mvc属性来执行此操作,这样我就不必在整个应用程序中关闭此功能?与这里的答案类似:@longda:也许可以尝试用一个元素包装它,以获得所需的url。从全局的角度来看,使用反射是相当简单的,但我不确定是否要按每个控制器/操作设置反射。也许开始提问?它只是不适用于ASP.net MVC项目,在viewStart中接收确定布局的运行进程时出现了以下错误:“xxx”“xxy”“xyy”游戏非常聪明。您可能需要详细说明其背后的逻辑,以免混淆读者。请求是在
路径中使用它,而不是在querystring中使用它。我遇到了相同的场景,其中一个参数是URL。即使URL编码正确,我也会出现这个错误。我最终只对参数进行了base64编码(并在api中进行解码),这比试图弄清楚发生了什么要容易得多。也许实现您自己的替换例程也是一个更好的选择。您不能使用
aa
a
ab
*
作为一个更简单的编码方案吗?现在这节省了我的时间,谢谢,但在适当的时候,我想检查一下这个建议:如果听到你的想法,我会很高兴。如果URL中的保留字符是百分比编码的,也会发生此错误,例如,
%25
而不是
%
,那么IIS可能会返回此错误以获得完全有效的URL。是的,甚至对我来说也是一样url.com/endpoint¶meter=SomeValue&otherparameter=AnotherValue
date1=2020-01-25T00:00:00.000Z
date1=2020-01-25T00%3A00%3A00.000Z