C# 编辑传递到IUrlHelper的匿名对象
ASP.NET核心没有那么有用,因为它只接受路由值的C# 编辑传递到IUrlHelper的匿名对象,c#,asp.net,asp.net-core,asp.net-core-mvc,C#,Asp.net,Asp.net Core,Asp.net Core Mvc,ASP.NET核心没有那么有用,因为它只接受路由值的object,所以我不能添加/删除/合并路由值。在Core之前,UrlHelper中的等价物有一个重载,它占用了一个RouteValueDictionary,这使它变得简单 因此,我有一个执行路由的方法。它接收对象routeValue,我想添加到它,然后传递到IUrlHelper.Action(…) 我可以从对象转换为路由值字典,但不能转换回匿名对象。也许还有别的办法 public string GenerateOrderRoute(objec
object
,所以我不能添加/删除/合并路由值。在Core之前,UrlHelper
中的等价物有一个重载,它占用了一个RouteValueDictionary
,这使它变得简单
因此,我有一个执行路由的方法。它接收对象routeValue
,我想添加到它,然后传递到IUrlHelper.Action(…)
我可以从对象
转换为路由值字典
,但不能转换回匿名对象
。也许还有别的办法
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);
}
我找到了一种方法,但它使用动态,我不喜欢。如果你发现这种方法有问题,请告诉我。如果有更好/不同的方法,请告诉我
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);
}
公共字符串生成器OrderRoute(对象routeValues=null)
{
//在这里,我将给定的路由值与我自己的一些值合并
var dict=(routeValues!=null)?新建RouteValueDictionary(routeValues):新建RouteValueDictionary();
添加(“区域”、“商业”);
dict.Add(“foo”、“bar”);
var expandoObject=新的expandoObject();
var expandoDictionary=(IDictionary)expandooobject;
foreach(dict中的var keyValuePair)
{
expandoDictionary.Add(keyValuePair);
}
return _urlHelper.Action(“详细信息”,“订单”,expandoDictionary);
}