有人知道如何嘲笑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

09-17 20:28