我正在使用asp.net mvc应用程序进行演示项目。我正在为我的网站使用图像延迟加载插件。 (Blazy.js)
我为图像放了一个图像夹。它是“tiny image gif”作为图像源的base64
细节在这里;
有史以来最小的GIF
http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever
但是当我看到日志时,有很多错误,比如;
http://www.domain.com/data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
{
"Depth": 0,
"ClassName": "System.Web.HttpException",
"Message": "A potentially dangerous Request.Path value was detected from the client (:).",
"Source": "System.Web",
"StackTraceString": " at System.Web.HttpRequest.ValidateInputIfRequiredByConfig()\r\n at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)",
"RemoteStackTraceString": null,
"RemoteStackIndex": 0,
"ExceptionMethod": {
"Name": "ValidateInputIfRequiredByConfig",
"AssemblyName": "System.Web",
"AssemblyVersion": "4.0.0.0",
"AssemblyCulture": "",
"ClassName": "System.Web.HttpRequest",
"Signature": "Void ValidateInputIfRequiredByConfig()",
"MemberType": 8
},
"HResult": -2147467259,
"HelpURL": null
}
所以,我的问题是:如何阻止/忽略来自mvc方面的这些请求?
也许在mvc routeconfig上配置?或者有更好的方法来解决这个错误吗?
答案 0 :(得分:0)
您可以通过调整requestValidationMode属性来更改此行为。在4.0及更高版本的框架中,它已更改为验证所有请求。在2.0版本中,它只验证了文档中的页面:
RequestValidationMode属性指定要使用的ASP.NET方法 验证将被使用。这可以是用于的算法 早于版本4的ASP.NET版本或版本 在.NET Framework 4中使用。该属性可以设置为以下内容 值:
- 4.5(默认值)。在此模式下,值会被延迟加载,也就是说,在请求它们之前不会读取它们。
- 4.0 HttpRequest对象在内部设置一个标志,指示每当有HTTP请求时都应触发请求验证 访问数据。这保证了请求验证 在访问cookie和URL之类的数据之前触发 请求。中的元素(如果有)的请求验证设置 配置文件或单个页面中的指令是 忽略。
- 2.0。仅对页面启用请求验证,而不是对所有HTTP请求启用。另外,元素的请求验证设置 (如果有的话)在配置文件或指令中 单个页面用于确定要验证的页面请求。
要将其更改回2.0版,您可以在web.config中执行以下操作。
<httpRuntime requestValidationMode="2.0"/>
如果仍有问题,您可能还需要调整requestPathInvalidCharacters属性。