2017-08-16 73 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); 
}