3

问题

当我尝试从 IIS7 网站的默认页面发出 AJAX 部分更新请求(使用 UpdatePanel 控件)时,它失败了 - 它没有返回要更新的 html,而是返回整个页面,然后导致 MS AJAX Javascript 抛出一个解析狗屎。

疑似原因

我已将原因缩小到两个问题 - 当我注册了某个自定义 http 模块时,向默认页面发出 AJAX 请求。对http://localhost的部分呈现请求将失败,但对http://localhost/default.aspx的部分呈现请求将正常工作。另外,如果我在自定义 HttpModule 中删除以下行:

_application.PreRequestHandlerExecute += OnPreRequestHandlerExecute;

AJAX 部分渲染将正常工作。奇怪吧?

另一件奇怪的事情...... 如果我查看 trace.axd,我可以看到当部分呈现请求失败时,会为一个部分呈现请求记录两个 POST 请求 - 其中一个 default.aspx 页面成功执行(跟踪信息如因为 page_load 被记录)但没有产生内容,第二个似乎没有实际执行(没有记录跟踪信息)但产生内容(HTTP_CONTENT_LENGTH 大于 0)。

请帮忙! 如果对 HTTP 模块或 MS AJAX Http 模块有很好的了解的人可以解释为什么会发生这种情况,我将不胜感激。事实上,如果请求 url 是“/”,那么明显的工作就是重定向到 default.aspx,但我真的很想了解为什么会发生这种情况。

4

1 回答 1

1

首先 PreRequestHandlerExecute 恰好在 HTTP 处理程序执行之前。

其次,对于在IIS7下使用HttpModules托管网站,我们最好以集成管道模式运行网站,并且我们必须将web.config中的HttpModules标签移动到system.webServer模块部分。

例如,如果您像这样更改 PreRequestHandlerExecute 中的处理程序:

void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
    HttpApplication application = (HttpApplication)sender;
    HttpContext context = application.Context;

    if(  something-happened  )
         context.Handler = null;
}

结果和你说的完全一样。

将处理程序设置为除默认值之外的任何其他内容,意味着 ASP.Net 不对当前请求负责。

请注意,每个请求只能有一个 HttpHandler。

于 2011-06-23T17:43:18.060 回答