2010-06-12 80 views
1

在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」?或者其他方式?

預先感謝您!

回答

1

怎麼樣來把它放入web.config

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

好和簡單的解決方案!謝謝! – Slauma 2010-06-12 12:03:04

+0

@Slauma歡迎您 – Dewfy 2010-06-12 12:05:02

2

事情是這樣的:

HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath.TrimEnd('/') 
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類型,you can see the available properties here

你可以做這樣的事情:

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

非常感謝,很好的解釋,特別是網站和網址之間的關係不是唯一的。我可能會與Dewfy的提議一起,針對我在某個請求的情況下的情況提出一個通用的解決方案。此外,我所說的郵件是由其他用戶觸發的,而不是接收者,這些用戶可能通過基本URL訪問服務器,我不想將這些URL公開給郵件接收者。因此,我認爲在「appSettings」中設置類似「主要」或「官方」的基本網址是最好也是最容易的地方。 – Slauma 2010-06-12 12:01:12