编辑传递给IUrlHelper

时间:2017-08-16 13:27:00

标签: c# asp.net asp.net-core asp.net-core-mvc

ASP.NET Core' UrlHelperExtensions没有用,因为它只接受object的路由值,因此我无法添加/删除/合并路由值。在Core之前,UrlHelper中的等价物有一个带RouteValueDictionary的重载,这很容易。

所以我有一个执行路由的方法。收到object routeValues,我想添加,然后转到IUrlHelper.Action(...)

我可以从object转换为RouteValueDictionary,但不能转回匿名object。也许还有另一种方式?

public string GenerateOrderRoute(object routeValues = null)
{
  var newRouteValues = //...I want to add/remove/merge to routeValues
  // e.g. I want to add an area 
  return _urlHelper.Action("details", "orders", newRouteValues);
}

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,但它使用了动态,我不喜欢。如果你发现这种方法的问题,请告诉我。如果有更好/不同的方式,请告诉我。

public string GenerateOrderRoute(object routeValues = null)
{
  // here I merge given route values with some of my own
  var dict = (routeValues != null) ? new RouteValueDictionary(routeValues) : new RouteValueDictionary();
  dict.Add("area", "commercial");
  dict.Add("foo", "bar");

  var expandoObject = new ExpandoObject();
  var expandoDictionary = (IDictionary<string, object>)expandoObject;
  foreach (var keyValuePair in dict)
  {
    expandoDictionary.Add(keyValuePair);
  }

  return _urlHelper.Action("details", "orders", expandoDictionary);
}