2014-09-01 51 views
3

我們剛發現我們的新「雲」託管存在問題。 基本上,NAT /端口轉發已配置,因爲它們不允許多個內部IP,因此可以爲多個站點完成SSL證書。MVC3生成包含端口號的URL,如何阻止它

這會導致在指定協議時生成的任何MVC路由出現問題。 此外,如果嘗試去一個需要登錄的URL,重定向的https登錄URL中的ReturnUrl參數也有端口號碼。

問題是 - 有什麼方法可以告訴MVC永遠不會包含即使存在端口號,也不會使用UrlHelpers操作/路由方法重載,從而允許您指定域並因此手動剝離端口號。

在情況不是很明顯從上面的什麼請求的過程是這樣,這裏有一個小例子:

  • 用戶瀏覽器發出請求,網站
  • 服務器轉發相同的URL,但與附加
  • 端口號
  • 生成頁面
  • 將響應發回給用戶瀏覽器。
  • 用戶登錄,但現在返回的URL具有端口,因此重定向時用戶獲取頁面無法顯示。

由於端口轉發malarkey,這似乎導致MVC路由變得混亂。 不知道技術服務器端如此好我不確定它是否只是託管公司不配置在IIS或NAT的東西正確的東西或是否只是一些web.config的東西,需要配置,以使MVC生成正確的URLs就好像這個端口malarkey不存在一樣。

任何提示或指針最受讚賞。

+0

呃,如果你有客戶端腳本,那也將是一個頭痛的問題。也許在[服務器故障](http://serverfault.com/)的人可以幫助在配置方面..對我來說,我不明白爲什麼端口被附加在第一位 - 是「切換「443」和「80」(http/s)? – EdSF 2014-09-01 16:45:20

+0

不,這是因爲您有一臺託管多個站點的服務器,但出於SSL證書的目的,它需要一個IP地址,並且您不能爲多個域註冊相同的IP地址。由於雲服務器上只允許有一個內部IP,因此使用端口號進行轉發是唯一的辦法,但這會導致上述問題。然而,看到我自己的答案 - 唷! – Peter 2014-09-03 14:25:26

回答

5

幸運的是,我發現有一個配置解決方案(因爲人們問「代碼更改怎麼樣?」 - >我:「認真?沒有這必須是配置問題」)。

該解決方案實施起來很簡單;添加以下到web.config的<appSettings>部分:

<add key="aspnet:UseHostHeaderForRequestUrl" value="true" />

因此,當ASP.NET/MVC生成的URL,將始終使用主機頭用於在其上用戶已請求代替網站端口轉發版本,耶!

+0

+1這很有趣! – EdSF 2014-09-03 15:36:30