2013-03-01 32 views
1

我在Global.asax中的OnApplicationStarted方法中進行系統版本比較,如果數據庫版本和系統版本不匹配,則不允許系統啓動。如何在OnApplicationStarted期間發生錯誤時重定向用戶?

所以它看起來像這樣:

protected override void OnApplicationStarted() 
{ 
    try{ 
    if(systemVersion != dbVersion) 
     throw new Exception("They are not same!"); 
    } 
    catch{ 
    //do some other things 
    //Response.Redirect("~/VersionError.html"); 
    } 
} 

但它說「沒有獲得響應在這種情況下。」我試圖捕獲Application_Error中的錯誤,但我得到了同樣的錯誤。

我的問題是,我可以如何將用戶重定向到這些方法中的錯誤頁面?

編輯:

我知道有一個在這個時候沒有迴應,但我是問如何解決這個問題。而且,我可以在OnApplicationStarted之後點擊方法的原因之一是,如果發生此異常,我們不想加載很多東西。

+0

ñIIS 7,有當時http://stackoverflow.com/questions/8791736/asp-net-request-is-not-available-in-this-context – 2013-03-01 16:49:57

回答

0

既然你沒有訪問到Response應用程序啓動時,但要如果滿足條件,所有傳入的請求都轉到錯誤頁面,則需要在管道的上方設置一些內容。認爲IIS模塊。通過以下安裝模塊:

<system.webServer> 
    <modules> 
    <add name="VersionsNotSameHandler" 
     type="Company.Exceptions.VersionsNotSameHandler, Company.Exceptions" 
     preCondition="managedHandler" /> 
    </modules> 
</system.webServer> 

現在的模塊代碼:

namespace Company.Exceptions 
{ 
    public class VersionsNotSameHandler: IHttpModule 
    { 
    public void Dispose() { } 

    public void Init(HttpApplication application) 
    { 
     context.PreRequestHandlerExecute += newEventHandler(OnPreRequestHandlerExecute) 
    } 

    public void OnPreRequestHandlerExecute(Object source, EventArgs e){ 

     HttpApplication app = (HttpApplication)source; 
     HttpRequest request = app.Context.Request; 
    // Check for invalid versioning 
     app.Response.Redirect('.html page displaying error', true); 
    } 
    } 
} 

的OnPreRequest每個請求之前發生,確保版本總是檢查......你可能想緩存如果你注意到事情放緩。

0

目前沒有任何反應,您在應用程序啓動!這是應用程序在啓動時不是響應正在進行時。

如果通過設置能夠捕獲所有請求的默認路由來滿足這個條件,您可以在這裏設置一些東西來指引每個url到錯誤頁面。這會給你想要的功能,因爲將來的請求會得到一個錯誤頁面。

+0

事情沒有可用的HttpRequest我想要在條件滿足之前不加載任何內容,所以如果在異常發生後我點擊了Application_End頁面,那麼已經太晚了,因爲它在Application Start中加載了很多東西。 – Tarik 2013-03-01 16:49:14

+0

那麼,爲什麼你不能檢查這個條件,如果它是真的,那麼設置一個捕獲所有將重定向到VersionError.html的路由,如果它不是真的,那麼運行其餘的設置代碼。這樣,如果條件成立,沒有別的東西可以運行。 – 2013-03-01 16:51:23

0

可你只是拋出一個HTTP錯誤:

throw new HttpException(403, "Forbidden"); 

然後在你的web.config:

<customErrors mode="On"> 
    <error statusCode="403" redirect="~/VersionError.html"/> 
    </customErrors> 
相關問題