我正在通过添加给出错误ID的路由数据值来处理Application.onerror向控制器操作的错误ID来处理ASP.NET MVC中的错误:

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"];

在我的本地计算机上,它运行良好,但是在服务器上,我尝试过的错误关键不会传递。

有什么可能的原因?


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

  • 如果我从Web服务器本身上的浏览器访问,路由数据已传输好
  • 如果我从另一台计算机访问,路由数据是 不是 转移
有帮助吗?

解决方案 2

我发现:在Web.config中设置了以下内容:

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

这导致操作被执行两次:第一次 错误关键,但第二个决定时间 没有 错误关键。我把它更改为

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

动作只执行一次, 错误关键。

其他提示

我从来没有尝试过以这种方式使用路由数据,您可能想研究一下

httpcontext.items [“ errorkey”

这些物品范围为您的要求。

您可能还想查看控制器上找到的tempdata [“ errorkey”]:

asp.net tempdata在请求之间持续存在

至于路由数据中的值,请查看 routedata.values [“ errorkey”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top