2010-10-29 30 views
5

Tôi đã ấn tượng rằng các tệp tĩnh (CSS, hình ảnh, @ tệp phông chữ, v.v.) đã bỏ qua ASP.NET hoàn toàn và được IIS phục vụ trực tiếp.BeginRequest kích hoạt các tệp tĩnh trong ứng dụng ASP.NET MVC

Tuy nhiên, trình xử lý sự kiện BeginRequest của tôi đang được gọi cho mọi yêu cầu HTTP, bao gồm cả các yêu cầu cho tệp tĩnh. Điều này liên quan đến tôi bởi vì tôi đang tạo bối cảnh dữ liệu Entity Framework để sử dụng suốt đời của mỗi yêu cầu trong trình xử lý sự kiện đó. Tôi không muốn tạo ra những bối cảnh đó nếu chúng không bao giờ được sử dụng.

Tôi đang sử dụng IIS 7 trên Windows 7 Ultimate mà không có ánh xạ xử lý đặc biệt được xác định. Tôi có sai không? Những sự kiện này có nên được kích hoạt không?

+0

là người mới làm quen MVC hoàn chỉnh, có phải khái niệm tương tự với HttpHandler không? – brumScouse

+0

Tôi không quen thuộc với các trường hợp sử dụng để tạo HttpHandlers tùy chỉnh. Làm thế nào bạn sẽ sử dụng một trong trường hợp này? –

+0

Tôi thực sự không biết với MVC. Tôi chỉ đang cố gắng hướng dẫn bạn một điều gì đó mà tôi biết cung cấp một cái gì đó tương tự trong (legacy?) ASP.NET – brumScouse

Trả lời

6

Tôi tin rằng trang web ASP.NET MVC mặc định đã được đặt trong web.config.

<modules runAllManagedModulesForAllRequests="true" /> 

Điều này có nghĩa là mọi mô-đun .NET sẽ được tải cho mọi yêu cầu IIS. Điều này là bắt buộc đối với ASP.NET MVC để xử lý định tuyến ít mở rộng hơn. Về cơ bản nó là một ánh xạ ký tự đại diện mà bạn sẽ viết trong IIS, nó sẽ khớp với mọi thứ và định tuyến nó tới ASP.NET đang tồn tại trong web.config.

Đọc thêm here, bao gồm cách tắt hành vi nếu bạn không sử dụng .NET 4.0. Nó là khó chịu, nhưng nó là giải pháp sạch nhất cho các trang web mà không thể đối phó với chi phí của việc có các tập tin tĩnh phục vụ bởi asp.net.

+0

Bài viết đó là một lời giải thích tuyệt vời về những gì đã xảy ra và tại sao. Cảm ơn! –

1

BeginRequest sẽ được kích hoạt cho tất cả các yêu cầu (bao gồm cả nội dung tĩnh) nếu:

  • Bạn đang sử dụng máy chủ web phát triển Visual Studio.
  • Bạn đã định cấu hình IIS để thực hiện việc này.

Hãy xem tại địa chỉ: http://forums.asp.net/t/1220664.aspx

+0

Tôi nhìn - họ nói những gì bạn nói, ngoại trừ việc nó không giúp OP ở đó; Tôi nghi ngờ nó sẽ không giúp OP ở đây ... –

+0

Như tôi đã nói trong câu hỏi, tôi đang sử dụng IIS 7, không phải Cassini, và tôi đã không chạm vào ánh xạ xử lý. Tôi không nghĩ rằng IIS được cấu hình theo mặc định để đại biểu yêu cầu nội dung tĩnh để ASP.NET, là nó? –

1

Ngoài khắc phục vấn đề cho các tập tin tĩnh của bạn, bạn có thể sử dụng Lazy khởi Lazy<T> cho ObjectContext của bạn: http://msdn.microsoft.com/en-us/library/dd997286.aspx

+0

Điều đó thực sự có thể hoạt động, vì tôi sẽ không sử dụng ngữ cảnh. Tôi muốn tìm ra lý do tại sao sự kiện này lại bị sa thải. –

0

Phương thức tích hợp trong IIS 7 hoạt động khác so với trước đây.

Bạn có thể chuyển sang chế độ cổ điển nếu muốn.

Hoặc bạn có thể xác định trình xử lý tuyến tùy chỉnh của mình và khởi tạo ngữ cảnh tại đó. Bằng cách đó, nó chỉ được thực hiện cho các tuyến đường cụ thể.

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