8

我希望以编程方式取消订阅已连接的事件。

我想知道如何取消订阅该EndRequest活动。

考虑到我正在使用内联代码,我不确定如何执行此操作。(这是正确的技术术语吗?)

我知道我可以使用some.Event -= MethodName取消订阅 .. 但我没有方法名称,在这里。

我使用内联代码的原因是因为我希望引用在事件之外定义的变量(我需要它......但感觉很臭......我觉得我需要传递它)。

有什么建议么?

代码时间..

public void Init(HttpApplication httpApplication)
{
    httpApplication.EndRequest += (sender, e) =>
    {
        if (some logic) 
            HandleCustomErrors(httpApplication, sender, e,
                              (HttpStatusCode)httpApplication.Response.StatusCode);
    };

    httpApplication.Error += (sender, e) => 
            HandleCustomErrors(httpApplication, sender, e);
}

private static void HandleCustomErrors(HttpApplication httpApplication, 
                                       object sender, EventArgs e, 
                                       HttpStatusCode httpStatusCode =
                                           HttpStatusCode.InternalServerError)
{ ... }

这只是我拥有的一些示例代码,用于处理ASP.NET应用程序中的错误。

注意:请不要把它变成关于 ASP.NET 错误处理的讨论。我只是在玩一些事件并将这些事件用于一些示例研发/学习。

4

1 回答 1

11

无法取消订阅该匿名代表。您需要将其存储在变量中并稍后取消订阅:

EndRequestEventHandler handler = (sender, e) =>
{
    if (some logic) 
        HandleCustomErrors(httpApplication, sender, e,
                          (HttpStatusCode)httpApplication.Response.StatusCode);
};

httpApplication.EndRequest += handler;
// do stuff
httpApplication.EndRequest -= handler;
于 2012-06-19T01:18:57.277 回答