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

时间:2010-06-12 10:59:03

标签: asp.net uri base-url

在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 个答案:

答案 0 :(得分:2)

这样的事情:

HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath.TrimEnd('/')

答案 1 :(得分:2)

你必须在某个地方放置一个密钥,某些东西,因为当你考虑你的网络应用程序时,它并没有真正与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类型,{{3} }。

您可以这样做:

var host = HttpContext.Current.Url.Host;
//generate your link using the host

答案 2 :(得分:1)

如何将其放入web.config

<configuration>
    <appSettings>
       <add key="SendingUrlBase" value="http://www.BlaBla.com"/>