Отсутствуют RouteData DataTokens

Я обрабатываю ошибки в ASP.NET MVC, отправляя идентификатор ошибки из Application.OnError в действие контроллера, добавляя значение данных маршрута, которое дает идентификатор ошибки:

Global.asax.cs / OnError:

var routeData = new RouteData ();
routeData.DataTokens.Add ("errorKey", errorId);
var context = new RequestContext (new HttpContextWrapper (Context), routeData);
errorController.Execute (контекст);

А потом читаем это в контроллере / action:

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

На моей локальной машине все работает нормально, но на серверах, которые я пробовал, errorKey не передается.

Какие могут быть возможные причины для этого?


Новое наблюдение, когда на сайте работает веб-сервер:

  • Если я захожу из браузера на самом веб-сервере, данные маршрута передаются нормально
  • Если я захожу с другого компьютера, данные маршрута не передаются

2 ответа

Решение

Я нашел причину: в web.config было установлено следующее:

что заставило действие быть выполненным дважды: первый раз с errorKey, но второй и решающий момент без errorKey. Я изменил это на

и действие было выполнено только один раз, с errorKey.

Я никогда не пытался использовать данные о маршруте таким образом, вы могли бы вместо этого изучить это

HttpContext.Items["errorKey"]

элементы ограничены вашим запросом.

Вы также можете посмотреть на TempData["errorKey"], найденный на контроллере:

ASP.NET TempData сохраняется между запросами

Что касается значений в данных маршрута, взгляните на RouteData.Values ​​["errorKey"]

Другие вопросы по тегам