我有一个路由设置正在执行此重写:
<rule name="some Rule" patternSyntax="Wildcard">
<match url="*" />
<conditions>
<add input="{PATH_INFO}" pattern="/folder/*" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/folder/details.aspx?url={PATH_INFO}" appendQueryString="true" />
</rule>
我也有这个:
<httpRuntime targetFramework="4.6.1" maxUrlLength="256" />
我有一个机器人调用一个无效的URL,如:
所以ASP.NET抛出了这个异常
此请求的URL长度超出配置的长度 maxUrlLength值。
at System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)
我遇到的问题是,在我的Page_Load和Page_PreRender之后,来自ASP.NET的ValidateInputIfRequiredByConfig
被称为 。我可以解释一下我在这里做的事情,但我的问题是:
为什么ASP.NET在我的页面执行后验证URL?它没有意义,为什么它浪费时间处理页面,之前不应该更有意义吗?有没有办法改变这种行为?
我在Github上传了一个演示: 因此,您可以下载此解决方案https://github.com/kblok/StackOverflowExamples/tree/master/AspNetDemoProject
然后打破In the page load然后再打开 Error module。您将看到PageLoad首先被击中。
答案 0 :(得分:0)
基于您在评论中提到的要点,我理解的是
details.aspx
正在使用查询字符串参数url=<path with unicode characters>
进行访问。 Page_Load
您的代码检查请求时,发现其无效并将用户重定向到新网址。 The length of the URL for this request exceeds the configured maxUrlLength value.
原始请求网址的长度在限制范围内,因此Page_Load
之前没有错误。