2013-06-19 15 views
15

Tôi chắc rằng tôi đã thấy điều này trong các thông báo ngoại lệ khác nhau trong khung công tác. Tôi đã kiểm tra các trang sau từ thư viện MSDN nhưng không thể tìm thấy nhiều hướng dẫn về nội dung thông điệp:Tại sao thư được xây dựng trong ngoại lệ có xu hướng không có chi tiết cụ thể? (ví dụ: khóa từ điển)

Exception Throwing
Error Message Design
Exception.Message Property

Phần duy nhất trong trang đầu tiên mà có thể giải thích đó là văn bản này:

Không tiết lộ thông tin nhạy cảm về bảo mật trong thông báo ngoại lệ mà không yêu cầu quyền thích hợp.

Đó là ArgumentException được ném bởi Dictionary<TKey, TValue>.Add method nhắc tôi về sự cố này. Có vẻ như sau:

System.ArgumentException : An item with the same key has already been added. 

Tại sao nó không giống như thế này?

System.ArgumentException : An item with the same key(123) has already been added. 

Giả định 123 là giá trị TKey, về cơ bản bất kỳ định dạng nào có giá trị TKey là điều tôi sẽ hữu ích khi theo dõi lỗi trong khi gỡ lỗi.

Có lý do nào được biết tại sao điều này không được bao gồm không?

Nó có được coi là hành vi xấu để tái ném ngoại lệ đối số bằng khóa trong thư không? Tôi đã xem xét việc tạo phân lớp ngoại lệ của riêng mình nhưng tôi nghĩ đây là trường hợp khi sử dụng một lớp ngoại lệ được xây dựng có vẻ như là một lựa chọn tốt hơn.

+0

Có lẽ vì lý do địa phương hóa – SLaks

+0

Điều đó có thể có ý nghĩa. Bởi vì TKey có thể thuộc nhiều loại khác nhau nên chúng có thể áp dụng chung, về cơ bản là một thông điệp cố định. – Kioshiki

+2

Tôi nghĩ vì 'Từ điển' là mục đích chung và khóa có thể chứa thông tin nhạy cảm về bảo mật. Nếu bạn biết chính xác rằng khóa của bạn không nhạy cảm với bảo mật, vì vậy bạn nên thêm nó vào thư của ngoại lệ. – tia

Trả lời

26

Theo nguyên tắc chung, các tình huống đặc biệt trong các khung công tác muốn tránh tạo ra các tình huống đặc biệt mới. Để định dạng tin nhắn như sau:

System.ArgumentException : An item with the same key(123) has already been added. 

Người ta phải giả định có thực hiện hợp lệ toString trên thông số chính. Nhưng nếu nó là null thì sao? Hoặc nếu nó là một khóa tùy chỉnh mà ném một ngoại lệ mới trong toString của nó? Hoặc thậm chí một số kẻ ngốc đã thực hiện một phương pháp toString ném một ngoại lệ ngẫu nhiên 1 trong số 10 lần? Điều gì sẽ xảy ra nếu ngoại lệ bên trong được gây ra bởi tình trạng thiếu bộ nhớ và việc chuyển đổi sẽ kích hoạt lại nó? Nó sẽ cho kết quả không thể đoán trước nhiều hơn là chỉ báo cáo những gì là chắc chắn để có thể báo cáo.

+2

Những phản ứng này đều có khả năng giải quyết được. Nulls có thể được biến thành một số chuỗi như 'null', và xử lý ngoại lệ có thể được quấn quanh chuỗi chuyển đổi, tạo ra một chuỗi mở rộng thay thế trong trường hợp một ngoại lệ bong bóng ra ngoài. – Kaz

+0

@EuroMicelli Tôi có OP và Kaz, các kịch bản phổ biến nhất sử dụng các kiểu nguyên thủy – RMalke

+8

@Kaz: Tất nhiên chúng có khả năng giải quyết được. Với một chi phí. Câu hỏi đặt ra là liệu vấn đề có giải quyết được hay không, câu hỏi đặt ra là liệu chi tiêu tiền là một cách hay để chi tiêu ngân sách và chi tiêu nó vào một tính năng giúp nhiều người hơn. –

8

Dường như một biện pháp phòng ngừa an ninh. Chương trình có thể làm việc với các dữ liệu nhạy cảm về bảo mật, mà bạn không cần phải ghi vào thông điệp tường trình hoặc tiết lộ thông qua giao diện người dùng. Nhưng, oops, có một vấn đề và một ngoại lệ không được giải quyết sẽ tắt, trong đó một số trình xử lý mặc định sẽ hiển thị hoặc ghi lại các mẩu thông tin nhạy cảm đó bởi vì nó được bao gồm trong văn bản ngoại lệ.

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