【发布时间】:2017-05-25 11:15:34
【问题描述】:
我有一个正在执行此重写的路由设置:
<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 值。
在 System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
在 System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext 上下文)
我遇到的问题是来自 ASP.NET 的 ValidateInputIfRequiredByConfig 在我的 Page_Load 和 Page_PreRender 之后被调用。我可以解释一下我在这里做什么,但我的问题是:
为什么 ASP.NET 在我的页面执行后验证 URL?没有意义,为什么要浪费时间处理页面,以前这样做不应该更有意义?有没有办法改变这种行为?
我在 Github 上上传了一个演示: 所以你可以下载这个解决方案https://github.com/kblok/StackOverflowExamples/tree/master/AspNetDemoProject
然后打破In the page load,然后在 Error module。您会看到首先点击 PageLoad。
【问题讨论】:
-
查看此链接msdn.microsoft.com/en-us/library/… 似乎
Validate the request是在URL 映射、引发BeginRequest事件等之前执行的第一步。你确定Page_Load是先执行的吗?您确定它会针对 SAME 请求执行吗? -
是的@VivekAthalye 我有一个错误模块,所以我添加了 3 个断点:在加载、PreRender 和该模块中,在加载和 PreRender 之后到达错误。我试试上传一段代码
-
您的
Page_Load和任何其他事件是否有可能正确执行导致某种Response.Redirect并在新请求开始时导致错误? -
是的,我在 Page_Load 上重定向,因为 URL 无效,并且我的错误模块(在页面加载后调用)中的 Server.TransferRequest 不起作用。我希望页面在我的页面加载之前失败。
-
@VivekAthalye 演示项目上传
标签: asp.net validation