Tôi có trang aspx nơi tôi cho phép người dùng tải lên tệp và tôi muốn giới hạn kích thước tải lên tệp tối đa là 10MB. IIS7, .NET 3.5. Tôi có cấu hình sau trong tệp web.config của mình:Tôi có thể nắm bắt và xử lý maxAllowedContentLength trong IIS7 ở đâu?
<location path="foo.aspx">
<system.web>
<!-- maxRequestLength: kbytes, executionTimeout:seconds -->
<httpRuntime maxRequestLength="10240" executionTimeout="120" />
<authorization>
<allow roles="customRole"/>
<!-- Deny everyone else -->
<deny users="*"/>
</authorization>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- maxAllowedContentLength: bytes -->
<requestLimits maxAllowedContentLength="10240000"/>
</requestFiltering>
</security>
<handlers accessPolicy="Read, Script">
<add name="foo" path="foo.aspx" verb="POST"
type="System.Web.UI.PageHandlerFactory"
preCondition="integratedMode" />
</handlers>
</system.webServer>
</location>
Tôi có mô-đun xử lý lỗi tùy chỉnh triển khai IHttpModule
. Tôi đã nhận thấy rằng khi vượt quá maxRequestLength
, HttpApplication.Error
thực sự được tăng lên. Tuy nhiên, khi tôi chơi với maxAllowedContentLength
, sự kiện HttpApplication.Error
không được nâng lên và người dùng được chuyển hướng đến trang 404.13. Tôi đã gắn liền với Visual Studio với ngoại lệ cơ hội đầu tiên bật không có gì đang được ném.
Suy nghĩ đầu tiên của tôi là kiểm tra chiều dài nội dung tiêu đề trong một sự kiện trước đó - có đề xuất/phương pháp hay nhất nào về nơi tôi thực hiện việc này không? PostLogRequest? EndRequest?
Không phải câu trả lời của hướng dương chỉ hoạt động nếu Chế độ đường ống được quản lý được đặt thành Tích hợp. Ít nhất đó là lý do tại sao tôi có kinh nghiệm – Marvin
Tôi nhận thấy rằng giải pháp này không xử lý Xác thực đúng cách. Khi tôi gọi Server.Transfer, các thói quen kiểm tra xác thực của trang đích không thành công vì thuộc tính HttpContext.Current.User là NULL. Nó dường như không được gây ra bởi thanh toán bù trừ các tiêu đề, như lấy dòng đó ra vẫn còn kết quả trong vấn đề. Có cách nào để khắc phục điều này? Nó không phải là một giải pháp khác. – Triynko
Tôi đặt mã lỗi của @Triynko trong trình xử lý sự kiện của bạn. Tôi đang sử dụng Umbraco - Tôi không chắc chắn nếu đó là đáng kể nhưng đây là nơi duy nhất tôi đã có thể bắt 'tối đa yêu cầu tối đa vượt quá' ngoại lệ như được nêu ra. Tôi cũng phải gọi 'Response.ClearContent();' để loại bỏ YSOD. 'Application_Error' không kích hoạt ngoại lệ này (mặc dù nó cho RequestValidation) và tôi không thể nhận được 'OnError' để kích hoạt trong UserControl hoặc Masterpage. Không thể tìm thấy trang thực. ;) –