【问题标题】:IIS7 Module Only Works First Time?IIS7 模块只能第一次使用?
【发布时间】:2011-10-06 03:32:24
【问题描述】:

我创建了一个 IIS 模块,它在页面加载之前将文本附加到页面。当我转到 URL 时,这在页面第一次加载时非常完美。但是,在随后的加载中,永远不会附加文本。

关于如何解决这个问题的任何想法?

== 代码 ==

这是我的 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <compilation debug="true" />
    </system.web>
    <system.webServer>
        <modules>
            <add name="MIModule" type="MI.MyModule, MI" />
        </modules>
        <caching enabled="false" enableKernelCache="false" />       
    </system.webServer>
</configuration>

部分模块代码:

public void context_PreRequestHandlerExecute(Object source, EventArgs e)
        {
            HttpApplication app = (HttpApplication)source;
            HttpRequest request = app.Context.Request;

            string pageContent = app.Response.Output.ToString();

            string useragent = "HI!<br />" + pageContent + "<hr />" ;

            try
            {
                _current.Response.Output.Write(useragent);
            }
            catch
            {
            }
        }

以及其余代码:

private HttpContext _current = null;

        #region IHttpModule Members

        public void Dispose()
        {
            throw new Exception("Not implemented");
        }

        public void Init(HttpApplication context)
        {
            _current = context.Context;

            context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
        }

        #endregion

【问题讨论】:

  • 如果它在页面之前加载,它听起来更像是一个模块,而不是一个处理程序。你能发布一些代码吗?
  • @bottlenecked - 对不起,你是对的,模块不是处理程序。我附上了一些代码。

标签: asp.net iis-7 iis-modules


【解决方案1】:

_current 变量实际上是HttpContext.Current 吗?它是您模块中的静态字段吗?何时/如何初始化?我的猜测是空的 catch 子句吞噬了所有的错误,按照这个想法,你很可能在 _current 上得到一个空引用。尝试删除 try/catch 以详细了解您的代码有什么问题

【讨论】:

  • 你说得对,_current 为空,这就是发生这种情况的原因。不知道为什么它是空的,关于如何修复它的任何想法?
  • 好吧,你确实HttpRequest request = app.Context.Request;,你可以很容易地写var response = app.Context.Response;然后response.Output.Write(/*your thing*/)。至于为什么它为空......它可能在第一个请求(当它实际初始化并随后正常运行时)完成后设置为空,因为 HttpContext 是为每个请求重新创建的(一个请求单例)。虽然如果其他人知道的更好,请随时纠正我:)
猜你喜欢
  • 2021-02-09
  • 2018-09-05
  • 2019-12-17
  • 2015-04-19
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多