Missing RouteData DataTokens
I'm handling errors in ASP.NET MVC by sending an error id from Application.OnError to a controller action, by adding a route data value that gives the error id:
Global.asax.cs/OnError:
var routeData = new RouteData(); routeData.DataTokens.Add("errorKey", errorId); var context = new RequestContext(new HttpContextWrapper(Conte开发者_开发百科xt), routeData); errorController.Execute(context);
And then reading it in the controller/action:
object errorKey = RouteData.DataTokens["errorKey"];
On my local machine it runs fine, but on the servers I have tried the errorKey is not passed along.
What could be possible reasons for this?
A new observation, when the site is running a web server:
- If I visit from a browser on the web server itself, the route data is transferred alright
- If I visit from another machine, the route data is not transferred
i've never tried to use the route data in such a way, you might want to look into this instead
HttpContext.Items["errorKey"]
the items are scoped to your request.
you may also want to look at TempData["errorKey"] found on the controller :
ASP.NET TempData persists between requests
as for the values in the route data, have a look at RouteData.Values["errorKey"]
I found the reason: In web.config was set the following:
<system.webServer> <httpErrors errorMode="Custom">
which caused the action to be executed twice: the first time with the errorKey, but the second and deciding time without the errorKey. I changed it to
<system.webServer> <httpErrors errorMode="Detailed">
and the action was only executed once, with the errorKey.
精彩评论