servicestack,Asp.net Mvc 4,servicestack" /> servicestack,Asp.net Mvc 4,servicestack" />

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允许您禁用某些端点的请求验证,如我的回答中所示。