2012-05-15 26 views
6

Bên trong Application_Start của Global.asax.cs của tôi, tôi đang cố gắng để có được những con đường ứng dụng hiện tại sử dụng:Get The Current Ứng dụng đường dẫn ảo trong ASP.Net

var virtualPath = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) 
          + HttpRuntime.AppDomainAppVirtualPath; 

này sẽ trở lại ví dụ: http://localhost:99/MySite/

sau đó tôi sẽ sử dụng URL này và thực hiện như sau:

var pageToHit = virtualPath + Pages\MyOtherPage.aspx 
var client = new WebClient(); 
client.DownloadData(dummyPageUrl); 

Tất cả điều này là tốt khi tôi chạy dự án trong IIS 6 hoặc Visual Studio built-in máy chủ web, Tuy nhiên mọi thứ đi điên trong IIS 7 như tôi nhận được một "System.Web.HttpException: Yêu cầu không có sẵn trong bối cảnh này".

tôi biết chủ đề này: Request is not available in this context

Tuy nhiên, tôi đã tự hỏi nếu có ai có bất kỳ ý tưởng về làm thế nào để làm các việc trên mà không thay đổi dự án để chạy trong chế độ cổ điển.

+0

Ngoài ra, điều này có vẻ trùng lặp với Cách nhận được tên máy chủ lưu trữ đầy đủ + số cổng trong Application_Start of Global.aspx? câu hỏi: http://stackoverflow.com/questions/4243270/how-to-get-full-host-name-port-number-in-application-start-of-global-aspx – JamieSee

Trả lời

5

Bạn không thể truy cập url tuyệt đối của yêu cầu hiện tại bên trong Application_Start khi chạy ở chế độ tích hợp. Bạn có thể truy cập tên đường dẫn ảo bằng cách sử dụng HostingEnvironment.ApplicationVirtualPath nhưng không phải là url tuyệt đối. Đây là an article giải thích cách giải quyết chung. Như đã giải thích trong bài viết bạn có 2 khả năng:

  1. Thay đổi mã ứng dụng của bạn không sử dụng bối cảnh yêu cầu (đề nghị)
  2. Thực hiện khởi trong Application_BeginRequest sử dụng một khóa và một singleton để đảm bảo rằng khởi này được thực hiện chỉ một lần cho toàn bộ thời gian tồn tại của AppDomain. Đây là một số similar thread thảo luận về phương pháp thứ hai này.
+0

ok có cách phục vụ trang theo cách thủ công? ví dụ var client = new WebClient(); client.DownloadData (Pages \ DummyPage.aspx) – MaYaN

+0

Không, phương thức WebClient yêu cầu một url tuyệt đối. –

+0

Tôi hiểu. Bây giờ vấn đề trong Application_BeginRequest là khi ứng dụng được khởi động, sự kiện _BeginRequest không được kích hoạt cho đến khi người dùng truy cập vào bất kỳ trang nào. Đó là một vấn đề khi tôi cần phải nhấn trang ngay sau khi ứng dụng được bắt đầu. – MaYaN

Các vấn đề liên quan