0

我正在处理 ASP.NET MVC 中的错误,方法是将错误 id 从 Application.OnError 发送到控制器操作,方法是添加一个提供错误 id 的路由数据值:

Global.asax.cs/OnError:

var routeData = new RouteData();
routeData.DataTokens.Add("errorKey", errorId);
var context = new RequestContext(new HttpContextWrapper(Context), routeData);
错误控制器.执行(上下文);

然后在控制器/动作中读取它:

对象 errorKey = RouteData.DataTokens["errorKey"];

在我的本地机器上它运行良好,但在我尝试过的服务器上,errorKey 没有传递。

这可能是什么原因?


当站点运行 Web 服务器时,一个新的观察结果:

  • 如果我从 Web 服务器本身的浏览器访问,路由数据传输正常
  • 如果我从另一台机器访问,路由数据不会传输
4

2 回答 2

2

我从来没有尝试过以这种方式使用路线数据,你可能想看看这个

HttpContext.Items["errorKey"]

这些项目的范围取决于您的请求。

您可能还想查看控制器上的 TempData["errorKey"] :

ASP.NET TempData 在请求之间保持不变

至于路线数据中的值,请查看 RouteData.Values["errorKey"]

于 2010-09-07T15:06:22.763 回答
1

我找到了原因:在 web.config 中设置了以下内容:

<system.webServer>
<httpErrors errorMode="自定义">

这导致动作被执行两次:第一次使用errorKey,但第二次和决定时间没有errorKey。我把它改成

<system.webServer>
<httpErrors errorMode="详细">

并且该操作只执行了一次,使用errorKey。

于 2010-09-09T05:09:04.117 回答