有人知道如何嘲笑Url.Content("~")
吗?
(顺便说一句:我正在使用起订量)
最佳答案
我想,您指的是控制器中的Url
属性,该属性的类型为UrlHelper
。我们能够模拟的唯一方法是提取一个IUrlHelper
接口,并创建一个实现并包装本机UrlHelperWrapper
类型的UrlHelper
类。然后,我们在BaseController
上定义一个新属性,如下所示:
public new IUrlHelper Url
{
get { return _urlHelper; }
set { _urlHelper = value; }
}
这使我们可以创建
IUrlHelper
的模拟并将其注入,但是在默认情况下,可以使用UrlHelperWrapper
类的实例。抱歉,它已经long绕了,但是正如您所发现的,否则这是一个问题。但是,它确实可以插入而无需更改控制器中的任何Url.Action
和类似调用。这是界面:
public interface IUrlHelper
{
string Action(string actionName);
string Action(string actionName, object routeValues);
string Action(string actionName, string controllerName);
string Action(string actionName, RouteValueDictionary routeValues);
string Action(string actionName, string controllerName, object routeValues);
string Action(string actionName, string controllerName, RouteValueDictionary routeValues);
string Action(string actionName, string controllerName, object routeValues, string protocol);
string Action(string actionName, string controllerName, RouteValueDictionary routeValues, string protocol, string hostName);
string Content(string contentPath);
string Encode(string url);
string RouteUrl(object routeValues);
string RouteUrl(string routeName);
string RouteUrl(RouteValueDictionary routeValues);
string RouteUrl(string routeName, object routeValues);
string RouteUrl(string routeName, RouteValueDictionary routeValues);
string RouteUrl(string routeName, object routeValues, string protocol);
string RouteUrl(string routeName, RouteValueDictionary routeValues, string protocol, string hostName);
}
我不会为您提供
UrlHelperWrapper
的定义-实际上,它只是一个笨拙的包装程序,实现了此功能,并将所有调用传递给UrlHelper
。