Asp.net mvc 4 潜在危险的请求服务堆栈
我正在提交一个包含值的查询字符串Asp.net mvc 4 潜在危险的请求服务堆栈,asp.net-mvc-4,servicestack,Asp.net Mvc 4,servicestack,我正在提交一个包含值的查询字符串 Body=%3Ch2%3E(Body=) 到servicestack rest终结点。这导致: 从客户端(正文=\“\”)检测到潜在危险的Request.QueryString值 我知道,在MVC 4中,如果您在模型中用[AllowHtml]修饰字段,则可以允许特定字段的Html内容,如下所示: [allowtml] 公共字符串体{get;set;} 这样做了,但错误仍然存在。有人怀疑是服务堆栈没有正确参与验证过程,所以通过使用相同的模型创建一个纯MVC4控制器
Body=%3Ch2%3E(Body=)
到servicestack rest终结点。这导致:
从客户端(正文=\“\”)检测到潜在危险的Request.QueryString值
我知道,在MVC 4中,如果您在模型中用[AllowHtml]修饰字段,则可以允许特定字段的Html内容,如下所示:
[allowtml]
公共字符串体{get;set;}
这样做了,但错误仍然存在。有人怀疑是服务堆栈没有正确参与验证过程,所以通过使用相同的模型创建一个纯MVC4控制器进行测试,结果很好
但是,我需要ServiceStack的解决方案。他们的文档很薄,谷歌搜索毫无结果 看起来您正在ASP.NET应用程序中托管ServiceStack服务 您可以将以下内容添加到web.config文件的
部分,以禁用整个应用程序的请求验证:
<system.web>
<httpRuntime requestValidationMode="2.0" />
...
</system.web>
...
如果只想对特定端点而不是整个应用程序禁用请求验证,请使用web.config中的
标记:
<location path="hello">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
这将禁用应用程序中所有/hello
端点的请求验证。例如,/hello?Body=%3Ch2%3E
可以工作,但/bar?Body=%3Ch2%3E
不能工作
您可以在中的ASP.NET中阅读有关请求验证的更多信息
显然,如果您是自托管ServiceStack服务,您不必担心这一点。谢谢,我希望有一个类似于纯MVC(属性或smth)的解决方案,但我认为这不太可能发生。至少我可以把它限制在有问题的端点上。这只是ASP.NET的一个限制/功能。正如我所说的,如果您自行托管ServiceStack服务,则不会出现此错误。我猜ServcieStack的作者不想为请求DTO引入ASP.NET特定属性,因为这会将它们与ASP.NET绑定。此外,ASP.NET允许您禁用某些端点的请求验证,如我的回答中所示。