2013-08-18 13 views
13

C# ile yazılmış bir ASP.NET web uygulamasını miras aldım. site genelinde birçok sayfa hostnamenizin kullanılarak alınır:Request.Url.Host vs Request.Url.Authority

BaseHost = Request.Url.Host; 

Ben Visual Studio 2012 Express kullanıyorum yana ve yerel IIS Express sunucusu yüklü, ben hostname eklenen bir bağlantı noktası numarası (Kalınmayacak görünmektedir localhost) yerel olarak debug/çalıştırdığımda. Yukarıdaki kod, dahil edilen port numarasına ve kod tarafından oluşturulan bağlantıların kopmasına neden olmaz (menü öğesi bağlantıları, yönlendirmeler, vb.).

BaseHost = Request.Url.Authority; 

Bu benim yerel olarak koşuyorum portu dahil ederek düzeltmek gibi görünüyor (localhost: 4652)

ben kod değiştirerek sorunu aşabiliriz görüyoruz ve yayınlanan zaman benim evreleme sunucusu (development.mysite.com).

Soruma Soru: Bu kötü biçim midir? Canlı sitemde bunun sorunlara yol açacağı bir zaman mı yoksa bir durum mu var? Tüm bu örneklerin hızlı bir şekilde yerine konması çok daha kolay görünüyor. Ben : with Request.Url.Port eklemek için küçük bir rutin yazma düşündüm, ancak sadece Request.Url.Authority kullanmak daha kolay görünüyor. Çok kolay olabilir ...

Sorularımı çevrimiçi ve MSDN'de araştırmayı denedim, ancak bir yanıt göremiyorum.

cevap

14

MSDNAuthority'a göre, bağlantı noktası numarası Host değilken bağlantı noktası numarasını içerir. Başka bir yönü ise, gerekiyorsa Authority'un ayrılmış karakterlerden kaçacağıdır.

başvurunuzu bilmeden ... bu ben ... şey kırmak yüzden devam gitmeyecek şüpheli ama genel olarak iyi bir fikir olup olmadığını söylemek için bir diğer seçenek olan

zor IIS IIS uygulamasının yerine IIS'yi çalıştır ...

+0

Küçük bir şüphe. Eğer uygulamayı localhost'ta çalıştırırsam, URL'mde port numaram var fakat üretimde URL'de port numaram yok. Yani, Url.Authority'yi serbestçe kullanabilirim? Port numarası yoksa, URl.Authority URL.Host ile aynı davranacaktır. URL'yi doğru bir şekilde doğru şekilde alabileceğim anlamına mı geliyor? Lütfen bana yol göster,. – Unbreakable

2

Buradaki sorunum, bağlantı noktası gerekmediğinde bile DAİMA bağlantı noktasını eklediği. Bu, bazı durumlarda birden çok sunucuyla ilgili sorunlara neden olabilir Örneğin, bir çift yük dengelenmiş web sunucusundaki bir güvenlik duvarının arkasındaki bir üretim sunucusu ortamında, güvenlik duvarı bağlantı noktasını yerleştirmeye devam etti, ancak bu bağlantı noktasından dolayı URL'nin bozulmasına neden oldu. sunucu grubundaki belirli bir web sunucusuna, güvenlik duvarıyla doğru şekilde eşlenemeyen bir ağa bağlandı. Birden fazla sunucuda kullanıyorsanız, bu yönteme çok dikkat ederim. Başvurumuzda bir kırılma sorununa neden oldu ve Url.Host'u kullanmaya geri döndürülmesi gerekiyordu. Ayrıca, üretim web URL'sinin port numarasıyla garip görünmesini sağladı.

+0

Yalnızca URL'nin bağlantı noktası varsa, Kurumun bağlantı noktasını içerdiğini görüyorum. Bu yüzden ALWAYS limanı eklemez. – Bochu

+0

Bağlantı noktası, tarayıcıdaki URL'nin bir parçası olmasa bile, her zaman bir sunucu grubu durumunda (yük dengeli web sunucuları) ekler. Bu yüzden, yük dengeleyicisinin arkasındaki birden fazla sunucuyla kullanmak için söylediğim gibi, daha fazla dikkat gerektiriyor. – HBlackorby

+0

Tek bir küçük şüphe. Eğer uygulamayı localhost'ta çalıştırırsam, URL'mde port numaram var fakat üretimde URL'de port numaram yok. Yani, Url.Authority'yi serbestçe kullanabilirim? Port numarası yoksa, URl.Authority URL.Host ile aynı davranacaktır. URL'yi doğru bir şekilde doğru şekilde alabileceğim anlamına mı geliyor? Lütfen bana yol göster,. – Unbreakable

İlgili konular