2017-08-16 90 views
0

ASP.NET核心的UrlHelperExtensions是没有多大用处的,因为它只接受object路线的价值观,所以我不能添加/删除/合并路线值。核心前UrlHelper相当于有这样花了RouteValueDictionary过载,这使得它很容易。编辑匿名对象传递到IUrlHelper

所以我必须执行路由的方法。它接收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); 
} 

回答

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); 
}