2015-07-02 41 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> 
相關問題