【问题标题】:ASPX-Handler calls full website lifecycle againASPX-Handler 再次调用整个网站生命周期
【发布时间】:2016-09-06 22:16:16
【问题描述】:

我的 ASPX 网站有 CSS 文件和 JS 文件链接为 ASHX 文件。例如,我在标记中得到了<script type="application/javascript" src="/JavaScript.ashx"></script>。 当我在 Chrome(没有附加组件的最新版本)中调试网站时,它会再次调用整个生命周期。

出于测试目的,我清除了处理程序的 ProcessRequest 方法并直接访问它。 (http://localhost:1234/JavaScript.aspx)。 在我的处理程序完成 ProcessRequest 方法后,它会跳转到 Default.aspx 的 Default() 构造函数(之后它显然会继续运行整个生命周期)。我认为在请求 Chrome 出于未知原因在后台访问 (http://localhost:1234/) 之后,并分别使用 IsPostBack = falseIsCallback = false 调用了我的 Default.aspx 的生命周期。

奇怪的是在 Internet Explorer 11 中我没有遇到这个问题。

这怎么可能? 这只是Chrome的问题吗? 它甚至会在使用实时版本时出现吗? 有什么解决办法吗?

【问题讨论】:

  • 您是否检查过HttpContext.Current.Request.RawUrl 的每个请求?请注意,您的帖子没有任何信息可以表明可能发生的情况 - 没有显示问题的示例代码,没有请求的 url ... 据我们所知,ProcessRequest 中的代码检查 Chrome 用户代理并 302 重定向到家。
  • 问题是我不能用新项目重现这个,所以它必须与我的代码有关。 RawUrl 是 /JavaScript.ashx 对于我的处理程序和 / 在它调用我不想要的 Default.aspx 之后。我的母版页和内容页中有很多代码,但我无法想象这与它有关,因为我直接调用了 ASHX 文件。所以我现在决定重命名 ASPX 和 MASTER 文件,看看会发生什么:什么都没有,它将继续处理 ProcessRequest 并完成,不再调用任何方法。可能是配置问题。
  • 好的,我找到了问题,我只是想知道为什么 Chrome 会假设 404 ...

标签: c# asp.net google-chrome ashx page-lifecycle


【解决方案1】:

好的,我发现它是由什么引起的:我的 web.config 包含

    <customErrors mode="On" redirectMode="ResponseRedirect">
        <error statusCode="404" redirect="/" />
    </customErrors>

<system.webServer>
    <httpErrors errorMode="Custom">
        <remove statusCode="404" />
        <error statusCode="404" path="/" responseMode="Redirect" />
    </httpErrors>
</system.webServer>

我知道这是处理 404 响应的错误方式,但我并没有打算离开它。我只是想知道为什么 Chrome 会得到 404 响应,即使我的处理程序返回内容? 因为这是它可以转发到“/”并重复我的生命周期的唯一原因。

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    相关资源
    最近更新 更多