2015-07-02 40 views
1

我想在Umbraco中触发BeginRequest事件,但它不起作用。其余的代码工作得很好。Umbraco应用程序BeginRequest永远不会触发

public class ApplicationEventHandler : IApplicationEventHandler 
{ 
    public void OnApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) { } 

    public void OnApplicationInitialized(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) { } 

    public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
    { 
     umbracoApplication.BeginRequest += umbracoApplication_BeginRequest; 

     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    } 

    void umbracoApplication_BeginRequest(object sender, EventArgs e) 
    { 
     // Create HttpApplication and HttpContext objects to access 
     // request and response properties. 
     UmbracoApplicationBase application = (UmbracoApplicationBase)sender; 
     HttpContext context = application.Context; 

     if (context.Response.Cookies[Const.LANGUAGE_COOKIE_NAME] == null) 
     { 
      context.Response.Cookies.Add(new HttpCookie(Const.LANGUAGE_COOKIE_NAME, Thread.CurrentThread.CurrentUICulture.Name)); 
      return; 
     } 

     //cookie exists already 
     else 
     { 
      //if no 404 
      if (UmbracoContext.Current.PublishedContentRequest != null && !UmbracoContext.Current.PublishedContentRequest.Is404) 
      { 
       //cookie value different than the current thread: user switched language. 
       if (context.Response.Cookies[Const.LANGUAGE_COOKIE_NAME].Value != Thread.CurrentThread.CurrentUICulture.Name) 
       { 
        //we set the cookie 
        context.Response.Cookies[Const.LANGUAGE_COOKIE_NAME].Value = Thread.CurrentThread.CurrentUICulture.Name; 
       } 
      } 
     } 
    } 
} 

你知道为什么它不起作用吗? 我使用的是umbraco 7,本地IIS(不是快速),我不能在函数umbracoApplication_BeginRequest中记录消息。

回答

2

这是我如何能够连接到的BeginRequest在一把umbraco 7.1.2实例。首先创建一个从UmbracoApplication继承的新类(请参见下面的示例),然后更新您的global.asax以从您的新类继承。

public class MyUmbracoApplication : Umbraco.Web.UmbracoApplication 
{ 
    private void Application_BeginRequest(object sender, EventArgs e) 
    { 
     /* Your code here */ 
    } 
} 
0

首先,你应该在你的web.config创建一个HttpModel类继承System.Web.IHttpModule接口

public class HttpModule : IHttpModule 
{ 
    void IHttpModule.Init(HttpApplication context) 
    { 
     context.BeginRequest += ContextBeginRequest; 
    } 

    private void ContextBeginRequest(object sender, EventArgs e) 
    { 
     HttpApplication app = sender as HttpApplication; 

     if (app != null) 
     { 
      //do stuff 
     } 
    } 

    void IHttpModule.Dispose() 
    { 
     // Nothing to dispose; 
    } 
} 

然后,

<system.webServer><modules runAllManagedModulesForAllRequests="true"> 
    <remove name="DoStuff" /> 
    <add name="DoStuff" type="YourNameSpace.HttpModule, YourAssembly" /></modules></system.webServer> 
相关问题