【问题标题】:ASP.Net: Using System.Web.UI.Control.ResolveUrl() in a shared/static functionASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()
【发布时间】:2010-09-06 19:24:27
【问题描述】:

在 Asp.Net 的共享/静态函数中使用 ResolveUrl() 的最佳方法是什么?我目前对 VB.Net 的解决方案是:

Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")

或 C#:

System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");

但我意识到这不是最好的称呼方式。

【问题讨论】:

    标签: c# asp.net vb.net static resolveurl


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      值得注意的是,虽然 System.Web.VirtualPathUtility.ToAbsolute 在这里非常有用,但它并不是完美替代 Control.ResolveUrl。

      至少有一个显着的区别:Control.ResolveUrl 可以很好地处理查询字符串,但它们会导致 VirtualPathUtility 抛出 HttpException。第一次发生这种情况时,这绝对令人费解,尤其是如果您习惯了 Control.ResolveUrl 的工作方式。

      如果您知道要使用的查询字符串的确切结构,这很容易解决,即:

      public static string GetUrl(int id)
      {
          string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
          return string.Format("{0}?id={1}", path, id);
      }
      

      ...但是如果查询字符串是从未知来源传入的,那么您将需要以某种方式将其解析出来。 (在深入了解之前,请注意 System.Uri 可能会为您完成)。

      【讨论】:

      • 这可能不再是真的了。在 .NET 4 中,当我评估 VirtualPathUtility.ToAbsolute("~/bar/baz?qux=123&quux=456", "/foo") 时,我得到 /foo/bar/baz?qux=123&quux=456
      【解决方案3】:

      我倾向于使用 HttpContext.Current 来获取页面,然后运行任何页面/Web 控制方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-02
        • 2015-09-13
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多