Почему происходит сбой GetVirtualPath после обновления до .NET 4

У меня определен следующий маршрут:

 var route = new Route("{id}/{a}/{b}", new MvcRouteHandler());
 route.Defaults = new RouteValueDictionary(new { controller = "Home", action = "Show" });
 route.Defaults.Add("a", "");
 route.Defaults.Add("b", "");

И следующий код контроллера:

public ActionResult Show(int id)
{
    RouteValueDictionary routeValues = new RouteValueDictionary();
    routeValues["Controller"] = "Home";
    routeValues["Action"] = "Show";
    routeValues["id"] = 1;
    var requestContext = new RequestContext(this.HttpContext, RouteData);
    var rv = route.GetVirtualPath(requestContext, routeValues);
    // when targetting .NET 4 rv is null, when its 3.5 it is "/1"

 }

Почему этот код возвращает маршрут в .NET 3.5, а не в .NET 4.0?

8
задан Sam Saffron 24 August 2010 в 01:59
поделиться

1 ответ

Почему вы смешиваете a и b с Контроллером и Action на вашем маршруте? Поскольку механизм маршрутизации требует Controller и Action , я предлагаю вам придерживаться их. Следующий пример работает:

var route = new Route("{Id}/{Controller}/{Action}", new MvcRouteHandler())
{
  Defaults = new RouteValueDictionary
  {
    { "Id", "" },
    { "Controller", "Home" },
    { "Action", "Show" },
  }
};

ActionResult Show(int id)
{
  RouteValueDictionary routeValues = new RouteValueDictionary();
  routeValues["Controller"] = "Home";
  routeValues["Action"] = "Show";
  routeValues["Id"] = 1;
  var requestContext = new RequestContext(this.HttpContext, RouteData);
  var rv = route.GetVirtualPath(requestContext, routeValues);
  // rv.VirtualPath == "1".
}
1
ответ дан 6 December 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: