2010-02-15 26 views
8

Làm cách nào để đặt giá trị maxAllowedContentLength cho mỗi hành động?Đặt giá trị MaxAllowedContentLength/maxRequestGiá trị mỗi hành động

Tôi có một vài hành động được sử dụng để tải lên tệp, mỗi tác vụ cần giá trị maxAllowedContentLength khác nhau.

Có nghĩa là chúng tôi không muốn sử dụng bộ lọc hành động vì chúng tôi muốn lọc yêu cầu này ở cấp IIS. Mặt khác, bộ lọc hành động là giải pháp tốt nhất từ ​​góc độ mã hóa, khi chúng đến sau các tuyến đường, vì vậy tôi thay đổi tuyến đường, nó sẽ tiếp tục hoạt động.

Trong IIS6 tôi biết chúng tôi có thể sử dụng thẻ <location> để chỉ định maxRequestLength cho một vị trí cụ thể. Tôi không biết cách sử dụng phương pháp này trên IIS7, và tôi không thích cách tiếp cận này, vì các tuyến đường url được mã hóa bằng tay trong web.config.

Giải pháp tốt nhất để giải quyết vấn đề này là gì?

+1

Quá xấu điều này chưa bao giờ được trả lời - đó là một chủ đề rất quan trọng khi lập trình tệp tải lên các trang với ASP.NET MVC. –

Trả lời

1

Tôi không tìm được cách nào để đạt được điều đó và tôi không nghĩ là có. Có lẽ điều tốt nhất để làm là sử dụng một trang web IIS khác nhau cho các hành động tải xuống tệp, với web.config tùy chỉnh.

+0

Phải có một cách .. :) Rất có thể, bạn sẽ có thể sử dụng sự phản chiếu và hack vào thời gian chạy .net và sửa đổi cấu hình. Không dễ, nhưng nó có hiệu quả không? (Tôi đã thực hiện những việc tương tự trong quá khứ, để đồng bộ hóa các phím auth giữa các ứng dụng khác giữa các ứng dụng.) – Onkelborg

+0

@Onkelborg muốn đưa ra câu trả lời chi tiết về điều này? hơn tôi sẽ có thể chấp nhận nó như là câu trả lời ... –

+0

Tôi đã đào sâu vào khuôn khổ với sự giúp đỡ của ILSpy và đào xung quanh một chút. Tôi nghĩ cách dễ nhất là viết lại web.config và sau đó chấp nhận rằng ứng dụng sẽ khởi động lại một lần. Tuy nhiên, có vẻ như nó có thể ghi lại trong bộ nhớ trong thời gian chạy, nhưng nó khá khó sử dụng. Tôi không nghĩ rằng bạn có thể có maxAllowedContentLength khác nhau cho mỗi vị trí, nhưng bạn có thể có maxRequestLength khác nhau cho mỗi vị trí. – Onkelborg

0

Tạo một trang web ảo riêng cho khu vực bạn muốn lọc khác nhau.

Sau đó chạy lệnh này trên máy chủ IIS của bạn. (thay thế [IISWebsitename])

C:\Windows\System32\inetsrv>appcmd set config "[IISWebsitename]" -section:requestFiltering -requestLimits.maxAllowedContentLength:100000000 -commitpath:apphost 

Điều đó cho phép 100.000.000 byte dữ liệu tải lên tại một thời điểm cho một trang web đó.

+1

Tôi không thích sử dụng Command-Line. Nhưng nếu tôi đã sử dụng một trang web khác, tôi có thể sử dụng Web.config để đặt maxAllowedContentLength. –

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