2012-11-20 20 views
1

這是很簡單的搶與如何捕獲頁面拋出一​​個異常

HttpContext.Current.Request.Url.ToString(); 

事實上當前的URL網址,這是公認的答案this very similar question. 不過,我已經實現了應用廣泛的錯誤處理,並且有一個ErrorController,用於生成在發生未處理的異常時發回給我們的電子郵件。如果我實現上面的錯誤控制的代碼片段,我回來的URL是一樣的東西

http://.../Error/GenericError?aspxerrorpath=/Controller/ErrorProneAction 

我怎麼能搶,實際上拋出錯誤的頁面的網址是什麼?也就是說,更多的東西一樣

http://.../Controller/ErrorProneAction 

回答

1

根據你的評論 - 你有一個像void Application_OnError(object sender, EventArgs e)在你的global.asax功能?如果是這樣,那麼你應該能夠得到你正在尋找的信息。

protected void Application_OnError(object sender, EventArgs e) 
{ 
    var app = (MvcApplication)sender; 
    var context = app.Context; 
    string path = context.Request.PathWithQueryString; 
    ... 

給你類似/controllerOrRoute/action?query=val的東西。或者您可以使用RawUrl或Url屬性來獲得基本相同的內容。我剛剛解僱了我的應用程序,看看它是什麼產生的,看起來這就是你要求的。

編輯:我應該注意到,我測試了MVC3以上。

+0

謝謝,我確實有你在Global提到的方法,而且我也使用mvc3。但是,如果我添加您發佈的代碼,我如何訪問正確的網址?我仍然得到了我在控制器中使用Request.Url在OP中提到的結果,就好像沒有任何變化。 –

+0

@四十二嗯,這是一個無賴。如果它在任何地方,我會確定它在上下文對象中。但是,如果你找不到它可能它不存在:( – hawkke

+0

猜測我真的不明白如何使用ApplicationState對象。定義Application [「Path」] =路徑後,此解決方案適用於我。謝謝,我很抱歉,如果我有時有點關節的話);) –

1

看到這個博客帖子:

http://blog.gauffin.org/2011/11/how-to-handle-errors-in-asp-net-mvc/

如果參數傳遞給你的ActionResult,這將採取aspxerrorpath查詢字符串值的值。

public ActionResult NotFound(string url) 
{ 
    var originalUri = url ?? Request.QueryString["aspxerrorpath"] ?? Request.Url.OriginalString; 
} 
+0

感謝您的回覆。傳入網址不起作用,因爲某些原因它始終爲空。您鏈接的博文是使用[HandleError]屬性,而我不是。我在Global.asax中有一個應用程序錯誤方法。也許這就是區別。我喜歡Request.QueryString調用。這實際上可以滿足它自己的需要。 –