if (Request.Headers["XYZComponent"].Count() > 0)
... sẽ cố gắng để đếm số ký tự trong chuỗi trả lại, nhưng nếu tiêu đề không tồn tại nó sẽ trở lại NULL, do đó tại sao nó ném một ngoại lệ. Ví dụ thứ hai của bạn một cách hiệu quả không được điều tương tự, nó sẽ tìm kiếm thông qua các bộ sưu tập của Headers và trở về NULL nếu nó không tồn tại, mà sau đó bạn cố gắng để đếm số ký tự trên:
Sử dụng này để thay thế:
if(Request.Headers["XYZComponent"] != null)
hoặc nếu bạn muốn điều trị chuỗi trống hoặc trống rỗng như không được thiết lập sau đó sử dụng:
if((Request.Headers["XYZComponent"] ?? "").Trim().Length > 0)
Nhà điều hành Null liên hiệp ?? sẽ trả về một chuỗi trống nếu tiêu đề là null, dừng nó ném một NullReferenceException.
Một biến thể của nỗ lực thứ hai của bạn cũng sẽ làm việc:
if (Request.Headers.AllKeys.Any(k => string.Equals(k, "XYZComponent")))
Edit: Xin lỗi đã không nhận ra bạn đang kiểm tra một cách rõ ràng cho giá trị đúng:
bool isSet = Boolean.TryParse(Request.Headers["XYZComponent"], out isSet) && isSet;
Sẽ trả về false nếu Giá trị tiêu đề là sai hoặc nếu Tiêu đề chưa được đặt hoặc nếu Tiêu đề là bất kỳ giá trị nào khác ngoài đúng hay sai. Sẽ trở lại đúng là giá trị header là chuỗi 'true'
Nguồn
2010-08-20 10:46:54
Tôi không biết nếu MVC kết thúc tốt đẹp chức năng nhưng trong các tiêu đề chính của HTTP có dạng "XYZComponent: true". Tôi chỉ wodnering nếu bạn đã quản lý để thiết lập một tiêu đề như "XYZComponent = true:" (tức là toàn bộ chuỗi bạn trích dẫn là tên và do đó những gì bạn cần phải kiểm tra. Nên được dễ dàng, đủ để kiểm tra kể từ khi bạn đã biết làm thế nào để lặp qua các phím ... – Chris