gpt4 book ai didi

asp.net - 使用自定义 http 模块时,IIS 7 中默认页面的 AJAX 部分呈现问题

转载 作者:行者123 更新时间:2023-12-02 04:15:57 24 4
gpt4 key购买 nike

问题

当我尝试从 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,但我真的很想了解为什么会发生这种情况。

最佳答案

首先 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 不对当前请求负责。

Note that each request only can have one HttpHandler.

关于asp.net - 使用自定义 http 模块时,IIS 7 中默认页面的 AJAX 部分呈现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2820806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com