如何注入子孙UrlHelper类为WebViewPage启用缓存无效?(How to inject

2019-10-21 05:03发布

我已经覆盖UrlHelper.Content()方法。 现在我想用来代替默认我的实现UrlHelper类。

如何配置MVC告诉它注入哪一类WebViewPage.Url财产?

更新1:
这个想法很简单。 捆绑支持高速缓存通过添加时间戳查询参数的URL破坏。
我想对单一资源相同的功能。
UrlHelper类允许重写其Content(string)方法。 因此有可能产生最终的字符串时采取资源的时间戳考虑。

更新2:
这似乎是我的前提是wrang。 我thout是SRC = “?...” 相当于SRC = “@ Url.Content(” 〜... “)”。 事实并非如此。

Answer 1:

你会需要推出自己的WebViewPage正在提供它自己的实现的UrlHelper这将覆盖Content()方法。

首先,创建类型:

public class MyUrlHelper : UrlHelper
{
    public MyUrlHelper() {}
    public MyUrlHelper(RequestContext requestContext) : base(requestContext) {}
    public MyUrlHelper(RequestContext requestContext, RouteCollection routeCollection) : base(requestContext, routeCollection) { }

    public override string Content(string contentPath)
    {
        // do your own custom implemetation here,
        // you access original Content() method using base.Content()
    }
}

public abstract class MyWebPage : WebViewPage
{
    protected override void InitializePage()
    {
        this._urlHelper = new MyUrlHelper(this.Request.RequestContext, RouteTable.Routes);
    }

    private MyUrlHelper _urlHelper;
    public new MyUrlHelper Url { get { return _urlHelper; } }
}

// provide generic version for strongly typed views
public abstract class MyWebPage<T> : WebViewPage<T>
{
    protected override void InitializePage()
    {
        this._urlHelper = new MyUrlHelper(this.Request.RequestContext, RouteTable.Routes);
    }

    private MyUrlHelper _urlHelper;
    public new MyUrlHelper Url { get { return _urlHelper; } }
}

然后,注册您的自定义MyWebPage~/Views/Web.Config

  <system.web.webPages.razor>
    ....
    <pages pageBaseType="Your.NameSpace.MyWebPage">
         ....
    </pages>
  </system.web.webPages.razor>


Answer 2:

我没有直接回答你的问题,但你可能只是创建一个这样的URLHelper类的扩展:

public static class CustomUrlHelper
{
    public static string CustomContent(this UrlHelper helper, string contentPath)
    {
        // your Content method 
    }
}

然后只需调用此方法Url这样的对象:

@Url.CustomContent("~/Content/Site.css")


文章来源: How to inject descendant UrlHelper class into WebViewPage to enable cache busting?