2010-09-07 50 views
0

我通過發送從Application.OnError錯誤ID到一個控制器行動處理在ASP.NET MVC中的錯誤,通過添加給出了錯誤ID的路由數據值:缺少的RouteData DataTokens

Global.asax中。 CS /的OnError:

 
var routeData = new RouteData(); 
routeData.DataTokens.Add("errorKey", errorId); 
var context = new RequestContext(new HttpContextWrapper(Context), routeData); 
errorController.Execute(context); 

然後閱讀它的控制器/動作:

 
object errorKey = RouteData.DataTokens["errorKey"]; 

在我的本地機器上運行良好,但在服務器上我曾嘗試errorKey沒有傳承下去。

這可能是什麼原因造成的?


一個新的觀察,當站點運行Web服務器:

  • 如果我從Web服務器上的瀏覽器訪問,路線數據是好的轉移
  • 如果我訪問從另一臺機器,路線數據轉移
+0

你看過RouteData.Values [「errorKey」]來查看你的數據是否在那裏? – 2010-09-08 02:17:53

回答

1

我找到了原因: 在web.config中設置如下:

<system.webServer> 
<httpErrors errorMode="Custom"> 

其中導致該動作被執行兩次:第一次使用的errorKey,但第二次和決定時間沒有使用的errorKey。 我與它的改變errorKey到

<system.webServer> 
<httpErrors errorMode="Detailed"> 

,並只執行一次的動作,

2

我從來沒有嘗試這樣的方式使用路由數據,你可能想尋找到這個代替

HttpContext.Items [ 「errorKey」]

項目的作用域您的要求。

您可能還需要看看TempData的[「errorKey」]在控制器上找到:

ASP.NET TempData persists between requests

爲在路由數據的值,看看RouteData.Values [」 errorKey「]

+0

謝謝。這很有幫助,但沒有改變行爲。 – 2010-09-09 05:09:46