我正在处理ASP.NET MVC中的错误,方法是将Application.OnError中的错误ID发送到控制器操作,方法是添加一个给出错误ID的路由数据值:
的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。
可能的原因是什么?
网站运行网络服务器时的新观察:
答案 0 :(得分:2)
我从未试图以这种方式使用路线数据,你可能想要查看这个
HttpContext.Items [ “errorKey”]
这些项目的范围是您的请求。
您可能还想查看控制器上的TempData [“errorKey”]:
ASP.NET TempData persists between requests
至于路线数据中的值,请查看 RouteData.Values [“errorKey”]
答案 1 :(得分:1)
我找到了原因: 在web.config中设置了以下内容:
<system.webServer> <httpErrors errorMode="Custom">
导致操作执行两次:第一次使用使用errorKey,但是第二次决定没有 errorKey。 我把它改成了
<system.webServer> <httpErrors errorMode="Detailed">
并且操作仅执行一次,使用 errorKey。