2013-08-18 35 views
13

我已經繼承了用C#編寫的ASP.NET Web應用程序。在整個網站的多個網頁的主機名是使用檢索:Request.Url.Host與Request.Url.Authority

BaseHost = Request.Url.Host; 

由於我使用Visual Studio 2012 Express和它安裝在本地IIS Express服務器,我似乎與(附加到主機的端口號被卡住本地主機)當我調試/本地運行。上面的代碼不會導致端口號被包含,並因此破壞由代碼(菜單項鍊接,重定向等)生成的鏈接。

我看到,我可以通過代碼更改爲解決該問題:

BaseHost = Request.Url.Authority; 

這似乎由包括當我在本地運行的端口來解決它(本地主機:4652),並在發佈到我登臺服務器(development.mysite.com)。

我的問題:這是不好的形式?是否有時間或情況會導致我的現場網站出現問題?這似乎更容易做到快速替換所有這些實例。我曾考慮編寫一個小程序來追加: with Request.Url.Port,但使用Request.Url.Authority似乎更容易。太容易了......

我試圖在網上和MSDN上研究我的問題,但我沒有看到答案。

回答

14

根據MSDNAuthority包含端口號,而Host不包含端口號。另一方面是如果需要Authority將轉義保留字符。

不知道您的應用程序很難說是否是個好主意,但一般我會懷疑它不會破壞任何東西......所以,儘管...

另一種選擇是運行應用程序IIS而不是IIS Express ...

+0

有一點疑問。如果我在本地主機上運行應用程序,我的URL中有端口號,但在生產中,我沒有端口號。那麼,我可以自由使用Url.Authority的權利?我的意思是如果端口號不存在,那麼URl.Authority將採用與URL.Host相同的權限。我的意思是我仍然能夠正確地獲取URL?請指導我。 – Unbreakable

2

我的問題是它始終添加端口,即使端口不是必需的。在某些情況下,這可能會導致多個服務器出現問題例如,在一對負載平衡Web服務器上的防火牆後面的生產服務器環境中,它始終將防火牆端口置於適當的位置,但導致URL中斷,因爲端口被綁定到服務器場中的特定Web服務器,該服務器場不能正確映射通過防火牆。所以如果你在多臺服務器上使用這個方法,我會非常小心。它導致了我們的應用程序的突破問題,不得不恢復使用Url.Host。另外,它使得生產網址看起來很奇怪,並帶有端口號。

+0

我只看到管理局包含端口,如果URL有端口。所以我認爲它並不總是添加端口。 – Bochu

+0

即使端口不是瀏覽器中URL的一部分,它也會始終將其添加到服務器場的情況(負載平衡Web服務器)中。所以或許這更像是一個謹慎的事情,正如我所說的將它用於負載均衡器後面的多個服務器一樣。 – HBlackorby

+0

一個小小的疑問。如果我在本地主機上運行應用程序,我的URL中有端口號,但在生產中,我沒有端口號。那麼,我可以自由使用Url.Authority的權利?我的意思是如果端口號不存在,那麼URl.Authority將採用與URL.Host相同的權限。我的意思是我仍然能夠正確地獲取URL?請指導我。 – Unbreakable

相關問題