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

标签 asp.net ajax httpmodule renderpartial

问题

当我尝试从 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/

相关文章:

ruby-on-rails - 在 Rails ajax 调用中将 DOM 编译为 angularjs

asp.net - 将错误从 HttpModule 传递到 MVC 应用程序

c# - 用于自定义身份验证的 HttpModule 将如何与 Windows 身份验证交互?

.net - FormsAuthenticationModule 是否检测是否……?

c# - IFrame 中的 Response.REdirect

c# - 如何从 ASP.NET MVC 中的不同 Controller 和操作呈现的 Html.Action 中检索 Controller 和操作名称

c# - 如何从计算机生成唯一 key 以许可我的应用程序?

javascript - 谷歌地图API,初始化 map 后在ajax中添加标记

javascript - 使用jquery和php更新img

asp.net - 您将如何将 Entity Framework (1.0) 与 ASP.Net Membership 一起使用?