【发布时间】:2014-12-02 08:54:58
【问题描述】:
我最近开始为我的操作方法使用属性路由,并且正在努力从 RouteData 获取操作名称(和/或 ID)。以下是我如何使用属性的示例:
[Route( "Edit/{id:int}" )]
public ActionResult Edit( int id )
{
...
}
之前我使用下面的方法作为RouteData的扩展来取值
public static string GetActionName( this RouteData routeData )
{
return routeData.Values[ "Action" ] as string;
}
这用于返回操作名称(在本例中为“编辑”)。现在这总是返回 null。对 RouteData 字典的检查表明,这些值似乎不再放在数组的根目录中,而是放在键为“[0] = “MS_DirectRouteMatches”的项中。
我可以通过以下方式访问此值,但由于我对如何填充这些值的理解有限,我担心,例如如果有多个匹配的路由,则此代码在某些情况下会失败。
public static string GetActionName( this RouteData routeData )
{
if( routeData.Values.ContainsKey( "MS_DirectRouteMatches" ) )
routeData = ( ( IList<RouteData> )routeData.Values[ "MS_DirectRouteMatches" ] )[ 0 ];
return routeData.Values[ "Action" ] as string;
}
访问由 AttributeRouting 填充的 RouteData 值的正确方法是什么?
【问题讨论】:
-
您找到解决方案了吗?我现在也有同样的问题。
标签: asp.net-mvc asp.net-mvc-routing attributerouting