代码之家  ›  专栏  ›  技术社区  ›  Slauma

如何动态创建到资源的完全限定超链接?

  •  1
  • Slauma  · 技术社区  · 14 年前

    在ASP.NET中,我想创建一个指向特定URI的链接,并通过电子邮件将此链接发送给用户,例如 http://www.BlaBla.com/CustomerPortal/Order/9876 . 我可以创建URI的第二部分 /CustomerPortal/Order/9876 动态隐藏在代码中。我的问题是:如何创建基URI http://www.BlaBla.com 在我的应用程序中没有硬编码吗?基本上我想做的是:

    http://localhost:1234/CustomerPortal/Order/9876 (on my development machine)
    http://testserver/CustomerPortal/Order/9876 (on an internal test server)
    http://www.BlaBla.com/CustomerPortal/Order/9876 (on the production server)
    

    那么,有没有一种方法可以询问服务器应用程序的运行位置:“请告诉我应用程序的基URI”?或者其他方式?

    提前谢谢!

    3 回复  |  直到 14 年前
        1
  •  1
  •   Dewfy    14 年前

    把它放进 web.config

    <configuration>
        <appSettings>
           <add key="SendingUrlBase" value="http://www.BlaBla.com"/>
    
        2
  •  2
  •   Frederik Vig    14 年前

    像这样:

    HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath.TrimEnd('/')
    
        3
  •  2
  •   Nick Craver    14 年前

    你必须在配置中放入一个密钥, 某物 在某个地方,因为当你想到你的Web应用程序时,它并不是真正与一个URL联系在一起的。例如:

    http://localhost:1234/
    http://yourMachineName:1234/
    http://yourMachineName.domain.com:1234/
    http://127.0.0.1:1234/
    

    这些只是一些到达 相同的 站点上 localhost ……是哪一个?同样的问题也存在于产品中,许多域或IP可能指向同一个Web应用程序,并且它使用主机头或可能没有任何区别。关键是,当在请求的上下文之外,站点不知道它使用的是什么URL,可能是任何东西,只是没有1:1的关系。

    如果你 在发送电子邮件时请求的上下文中,然后查看 HttpRequest.Url ,这是一个 Uri 类型,以及 you can see the available properties here .

    你可以这样做:

    var host = HttpContext.Current.Url.Host;
    //generate your link using the host
    
    推荐文章