0

规定:不能使用 base64 编码。我被告知不要增加任何超过必要的有效负载,base64 会这样做。

首选:将requestValidationMode单页设置为 2.0,但我认为这是不可能的

场景:用户浏览并选择图像。前端将使用 , 抓取图像FileReader.readAsDataUrl(f),然后对其进行 base64 解码(给我留下等效的FileReader.readAsBinaryString(f),但与 IE10 不兼容),然后通过 AJAX 将其发送到我的 IHttpHandler。

目前,这将抛出一个HttpRequestValidationException,因为二进制数据包含可能有害的字符。这不是问题,因为我们的后端会验证数据。如何仅对这些数据修复/绕过这种期望?

4

1 回答 1

1

这需要一点点挖掘,但这是答案:

在 web.config 中,添加:

<httpRuntime requestValidationMode="4.5" />

然后,您可以使用 HttpRequest.Unvalidated 属性来读取未验证的表单值:

var s = context.Request.Unvalidated.Form["forum_post"];

这是 ASP.NET 4.5 中的新功能,称为Deferred ("lazy") request validation

开发人员经常要求能够选择性地关闭其应用程序的请求验证。例如,如果您的应用程序是论坛软件,您可能希望允许用户提交 HTML 格式的论坛帖子和评论,但仍要确保请求验证正在检查其他所有内容。

ASP.NET 4.5 引入了两个功能,使您可以轻松地选择性地处理未验证的输入:延迟(“延迟”)请求验证和访问未验证的请求数据。

对于某些人来说,你可能会遇到问题,我不能说我理解原因,除了通过更改requestValidationModeto 4.5,它会抛出一个System.StackOverflowException. 为了在我的情况下解决这个问题,我只在我的处理程序上设置了请求验证模式,就像在 web.config 中一样:

<location path="~/Handlers/MyHandler.ashx">
    <system.web>
        <httpRuntime requestValidationMode="4.5" />
    </system.web>
</location>
于 2013-05-20T16:05:44.697 回答