之後被稱爲我有一個路由設置這是做這個改寫:ValidateInputIfRequiredByConfig的Page_Load和Page_PreRender
<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" />
我有一個機器人呼叫到一個無效的網址,是這樣的:
,從而P.NET拋出此異常
該請求的URL長度超過配置的 maxUrlLength值。
在System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
在System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext的上下文)
我的問題是,從ValidateInputIfRequiredByConfig
ASP.NET在之後我的Page_Load和Page_PreRender被稱爲。我可以解釋更多關於我在這裏做什麼,但我的問題是:
爲什麼ASP.NET在我的頁面執行後驗證URL?它沒有意義,爲什麼它浪費時間處理頁面,應該沒有更明智的做到這一點?有什麼方法可以改變這種行爲嗎?
我上傳Github上演示: 所以,你可以下載這個解決方案https://github.com/kblok/StackOverflowExamples/tree/master/AspNetDemoProject
並打破In the page load,然後在 Error module。你會看到PageLoad首先被擊中。
看這個鏈接https://msdn.microsoft.com/en-us/library/bb470252.aspx#Life%20Cycle%20Stages看起來'驗證請求'是甚至在URL映射之前執行的第一步,提高'BeginRequest'事件等等。你確定首先執行了「Page_Load」嗎?你確定它是爲了SAME請求而執行的嗎? –
是@VivekAthalye我有一個錯誤模塊,所以我添加了3個斷點:在Load,PreRender和該模塊中,錯誤在Load和PreRender之後。我會嘗試上傳一段代碼 – hardkoded
是否有可能您的「Page_Load」和其他事件得到正確執行,導致某種「響應」。重定向「,並在新請求開始時導致錯誤? –