2010-12-08 18 views
5

Senaryo: "~/yol/to/page.aspx? Query = string" gibi bir uygulama göreli URL'im var. Bu sayfaya programlı olarak bir web isteği oluşturmanız ve şu anda WebRequest.Create'u kullanmam gerekiyor. Sorun WebRequest.Create protokol/etki alanı/bağlantı noktası vb dahil olmak üzere tam nitelikli bir url gerektirir.Yerleşik, geçerli URL verildiğinde "~/page.aspx" gibi göreceli bir yoldan mutlak (tam nitelikli) bir url oluşturuyor mu?

Geçerli Request.Url nesnesine erişimim var ancak yalnızca temel almanın kolay bir yolu yok gibi görünüyor. protokolü (HTTP vs HTTPS) yanı sıra herhangi bir port numaraları yanı sıra uygulamanın yolunu tutmak.

Buradaki tüm bilgiler demek istediğim, yani gerekirse tüm parçaları alıp birleştirebiliyordum ama hataya eğilimli olabileceği düşünüldü ve iyi bir şekilde test edilmesi gereken bir şey olması harika olurdu. iş. Page.ResolveUrl beni neredeyse oraya götürüyor, ancak protokol ve alan/bağlantı noktasını kaçırıyor.

cevap

9

System.Web.VirtualPathUtility.ToAbsolute()'u deneyin. Bunu kullandım (VB.NET de olsa, ama eminim C# eşdeğeri var) büyük bir başarı ile. Hatta bir temel sanal yolu bile çevirebilir (yani, System.Web.VirtualPathUtility.ToAbsolute("~") uygulamanızın temel URL'sine dönüşecektir).

DÜZENLEME

ne dersiniz Request.Url.GetLeftPart(UriPartial.Authority)? Bu, Url'nin Şema ve Otorite bölümlerini almalı (ki sizin de bahsettiğiniz protokol ve alan olduğuna inanıyorum). İşte, şu adresteki MSDN dokümanı: http://msdn.microsoft.com/en-us/library/system.uri.getleftpart.aspx

+1

İyi değil. System.Web.VirtualPathUtility.ToAbsolute ("~") '' http: // localhost: 3384/applicationName' yerine '/ applicatioName' verir – Davy8

+0

Ek bir öneri ekledim. – Ender

+0

Parlak, teşekkürler! – Davy8

İlgili konular