在Page_Load和Page_PreRender

时间:2017-05-25 11:15:34

标签: asp.net validation

我有一个路由设置正在执行此重写:

<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,如:

http://localhost:53649/route/Somefolder-Heres/W-ithsom-tet-Text-(An%C3%83%C6%92%C3%86%E2%80%99%C3%83%E2%80%A0%C3%A2%E2%82%AC%E2%84%A2%C3%83%C6%92%C3%A2%E2%82%AC%20%C3%83/MoreTExt-(%C2%A2%C3%A2%E2%80%9A%C2%AC%C3%A2%E2%80%9E%C2%A2%C3%83%C6%92%C3%86%E2%80%99%C3%83%C2%A2%C3%A2%E2%80%9A%C2%AC%C3%82%20%C3%83%C6%92%C3%82%C2%A2%C3%83%C2%A2%C3%A2%E2%82%AC%C5%A1%C3%82%C2%AC%C3%83%C2%A2%C3%A2%E2%82%AC%C5%BE%C3%82%C2%A2%C3%83%C6%92%C3%86%E2%80%99%C3%83%E2%80%A0%C3%A2%E2%82%AC%E2%84%A2%C3%83%C6%92%C3%82%C2%A2%C3%83%C2%A2%C3%A2%E2%82%AC%C5%A1%C3%82%C2%AC%C3%83%E2%80%A6%C3%82%C2%A1%C3%83%C6%92%C3%86%E2%80%99%C3%83%C2%A2%C3%A2%E2%80%9A%C2%AC%C3%85%C2%A1%C3%83%C6%92%C3%A2%E2%82%AC%C5%A1%C3%83%E2%80%9A%C3%82%C2%A1stasis)/someUrl(An%C3%83%C6%92%C3%86%E2%80%99%C3%83%E2%80%A0%C3%A2%E2%82%AC%E2%84%A2%C3%83%C6%92%C3%A2%E2%82%AC%20%C3%83%C2%A2%C3%A2%E2%80%9A%C2%AC%C3%A2%E2%80%9E%C2%A2%C3%83%C6%92%C3%86%E2%80%99%C3%83%C2%A2%C3%A2%E2%80%9A%C2%AC%C3%82%20%C3%83%C6%92%C3%82%C2%A2%C3%83%C2%A2%C3%A2%E2%82%AC%C5%A1%C3%82%C2%AC%C3%83%C2%A2%C3%A2%E2%82%AC%C5%BE%C3%82%C2%A2%C3%83%C6%92%C3%86%E2%80%99%C3%83%E2%80%A0%C3%A2%E2%82%AC%E2%84%A2%C3%83%C6%92%C3%82%C2%A2%C3%83%C2%A2%C3%A2%E2%82%AC%C5%A1%C3%82%C2%AC%C3%83%E2%80%A6%C3%82%C2%A1%C3%83%C6%92%C3%86%E2%80%99%C3%83%C2%A2%C3%A2%E2%80%9A%C2%AC%C3%85%C2%A1%C3%83%C6%92%C3%A2%E2%82%AC%C5%A1%C3%83%E2%80%9A%C3%82%C2%A1stasis)/

所以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首先被击中。

1 个答案:

答案 0 :(得分:0)

基于您在评论中提到的要点,我理解的是

  1. 您的网页details.aspx正在使用查询字符串参数url=<path with unicode characters>进行访问。
  2. Page_Load您的代码检查请求时,发现其无效并将用户重定向到新网址。
  3. 这个新网址超过了允许的最大长度,因此您获得了The length of the URL for this request exceeds the configured maxUrlLength value.
  4. 原始请求网址的长度在限制范围内,因此Page_Load之前没有错误。