我如何传递一个对象给Url.当我在类中使用helper时,Action作为RouteValueDictionary
本文关键字:helper RouteValueDictionary 作为 Action 一个对象 何传递 Url | 更新日期: 2023-09-27 18:15:23
简体版:我有一个扩展方法,扩展MVC 5的UrlHelper helper方法。我想传入(字符串动作,字符串控制器,对象routeValues)到这个方法,并使用Url。Action(" Action ", "controller", routeValues)。当我这样做时,我得到routeCollection
的ArgumentNullException
。正确的做法是什么,这样我就不会得到这个异常?
我有以下扩展方法:
public static string ActionToUrl(this UrlHelper url, string action, string controller, object routeValues)
{
Uri contextUri = HttpContext.Current.Request.Url;
var relativeContentPath = url.Action(action, controller, routeValues);
var baseUri = string.Format("{0}://{1}{2}", contextUri.Scheme,
contextUri.Host, contextUri.Port == 80 ? string.Empty : ":" + contextUri.Port);
return string.Format("{0}{1}", baseUri, VirtualPathUtility.ToAbsolute(relativeContentPath));
}
这个想法是,这个方法将返回一个绝对的url路径,而不是Url.Action
返回的相对路径。
然而,我得到一个ArgumentNullException当我尝试使用Url.Action
在这与RouteValueDictionary
过载:
Value不能为空。参数名称:routeCollection
如果我使用简单的(action, controller) overload,我不会得到这个异常。
我还尝试用RouteValueDictionary(object routeValues)
构造RouteValueDictionary
,然后将其发送到Url.Action
,如:
var routeValueDictionary = new RouteValueDictionary();
var relativeContentPath = url.Action(action, controller, routeValueDictionary);
但我得到同样的错误,所以我知道问题不是从object
到RouteValueDictionary
的转换。
我在这里错过了什么?
编辑:扩展实际上是工作时,我在一个视图中使用它。当我从服务类中的新UrlHelper调用这个时,我得到了异常。为什么会出现这个异常?
解决了。如果有人需要这样做:问题不在于扩展方法,而在于我调用它的方式。我正在用默认构造函数实例化一个新的UrlHelper
,但是我需要使用接受requestContext
的构造函数。
如果你想在控制器中使用这个,用:
构造UrlHelper
var url = new UrlHelper(Request.RequestContext);
和在一个单独的类中:
var url = new UrlHelper(HttpContext.Current.Request.RequestContext);