2010-02-01 19 views
6

IIS7 üzerinde çalışan bir ASP .Net uygulamasına sahibim. Uygulamamdaki bir sınıfın bazı statik özelliklerini ayarlamak için sitenin çalışmakta olduğu geçerli URL'yi kullanıyorum.Anasistem etki alanı adını nasıl HttpContext.Current.Request kullanmadan ASP.NET'te alabilirim?

var host = HttpContext.Current.Request.Url.Host; 

Ve bu benim dev makine (windows XP/Cassini) üzerinde çalışıyor: Ben bu kullanarak alan adı (sınıfının statik yapıcı insde) alıyorum Bunu yapmak için. Ancak, IIS7'ye dağıttığımda bir istisna alıyorum: "İstek bu bağlamda mevcut değil".

Bunun nedeni, bu kodu, herhangi bir istek gelmeden önce IIS'de yürütülmekte olan bir nesnenin statik yapıcısında kullanıyorum; ve Cassini bir istek gerçekleşene kadar statik yapıcıyı tetiklemiyor. Şimdi, ben aslında bu nedenle bu nedenle neden alan adı çekerek fikri istemedim, ama bulduğum yegane yerdeydim =)

Yani, herkesin alabileceği başka bir yer biliyor mu ana bilgisayar etki alanı adı? ASP. Net'in bir düzeyde HttpRequests'den bağımsız olarak farkına varması gerektiğini varsayarak, sadece nasıl erişeceğimi bilmiyorum.

cevap

8

Etki alanının istekte bulunması sebebi ... isteğidir. Örneğin bunlar birkaç Stack Exchange siteleri http://www.stackexchangesites.com/ gelmektedir: Bunları ping Eğer

, aynı IP/Web onlar tüm noktayı göreceksiniz Sunucu ve aynı uygulama tarafından sunulacak (veya bu durumda birden fazla uygulama, ancak örnek, büyük bir tane ise). Ancak uygulama, host header hizmete kadar olan istekle birlikte hangisinin geleceğini bilmiyor Bu site için r. Her istek farklı bir alan adına olabilir ... böylece uygulama bunu bilmez.

Eğer değişmezse, web.config numaralı telefondan appSetting olarak saklayabilirsiniz.

+0

Ah ne gerçekten yapmalı, bu şeyi statik bir kurucuda başlatmıyor. Aslında, güvende olmak istiyorsam, değerlerimi hiç statik olmamalıyım - Birden fazla etki alanından istek almam durumunda (her durumda kazandığım halde) onları her istekte tekrar görmeliyim. t, ama bunun farkında olmak güzeldir). Yardımınız için teşekkürler - maalesef şimdi bu eski uygulamadan daha büyük bir parçayı yeniden tercih etmem gerekir =) – Badjer

1

global.asax sayfasını kullanın veya HttpModule yazın ve istek olaylarını başlatmak için abone olun. İsteğin etkinlik işleyicinize iletilmesini sağlayabilirsiniz.

İlgili konular