2011-12-30 32 views
51

Tôi có trang error.aspx. Nếu người dùng truy cập vào trang đó thì nó sẽ tìm nạp đường dẫn lỗi trong URL phương thức page_load() bằng cách sử dụng Request.QueryString["aspxerrorpath"] và nó hoạt động tốt.Làm thế nào để kiểm tra xem Request.QueryString có một giá trị cụ thể hay không trong ASP.NET?

Nhưng nếu người dùng trực tiếp truy cập trang đó, nó sẽ tạo ra một ngoại lệ vì aspxerrorpath không có ở đó.

Tôi làm cách nào để kiểm tra xem aspxerrorpath có ở đó hay không?

+0

tôi cũng đã thử bằng cách sử dụng Request.QueryString.Count! = 0 nhưng sau đó vấn đề là nếu người dùng đính kèm bất kỳ điều gì như? Abc = 1223 sau đó một lần nữa nó sẽ cung cấp cho ngoại lệ – Peeyush

+0

'Request.QueryString.Count! = 0' sẽ chỉ đơn giản nói bạn nếu có tất cả các tham số _no_. – Oded

Trả lời

83

Bạn chỉ có thể kiểm tra null:

if(Request.QueryString["aspxerrorpath"]!=null) 
{ 
    //your code that depends on aspxerrorpath here 
} 
+0

cảm ơn nó hoạt động tôi đã cố gắng mà trước đây nhưng thời gian đó nó không làm việc nhưng bây giờ nó làm việc .. có thể bị mất một cái gì đó thời gian đó. :-) – Peeyush

+3

@Peeyush Có thể bạn sẽ tìm thấy bạn đang cố gắng để đúc nó vào một.() 'và do đó đã cố gắng bỏ một giá trị null vào giá trị chuỗi trước khi thử nghiệm cho chính giá trị null. Đó là một sai lầm phổ biến. –

+0

Lưu ý rằng điều này sẽ không kiểm tra xem một khóa có tồn tại trong QueryString khi nó không có giá trị hay không. –

7
string.IsNullOrEmpty(Request.QueryString["aspxerrorpath"]) //true -> there is no value 

Sẽ trở lại nếu có một giá trị

35

Kiểm tra giá trị của tham số:

// .NET < 4.0 
if (string.IsNullOrEmpty(Request.QueryString["aspxerrorpath"])) 
{ 
// not there! 
} 

// .NET >= 4.0 
if (string.IsNullOrWhiteSpace(Request.QueryString["aspxerrorpath"])) 
{ 
// not there! 
} 

Nếu nó không tồn tại, giá trị sẽ là null, nếu nó tồn tại, nhưng không có val ue đặt nó sẽ là một chuỗi rỗng.

Tôi tin rằng ở trên sẽ phù hợp với nhu cầu của bạn tốt hơn chỉ là một thử nghiệm cho null, như một chuỗi rỗng cũng chỉ là xấu cho tình hình cụ thể của bạn.

+1

Và nếu .NET == 4.0 thì sao? Sử dụng 'IsNullOrWhiteSpace'? – Chris

+0

nếu .NET == 4.0? Sử dụng IsNullOrWhiteSpace –

1

Để giải quyết vấn đề của bạn, hãy viết dòng sau vào phương thức Page_Load của trang của bạn.

if (String.IsNullOrEmpty(Request.QueryString["aspxerrorpath"])) return; 

Net 4.0 cung cấp nhiều cái nhìn gần gũi hơn với null, trống hoặc các chuỗi khoảng trắng, sử dụng nó như thể hiện trong các dòng sau:

if(string.IsNullOrWhiteSpace(Request.QueryString["aspxerrorpath"])) return; 

này sẽ không chạy các câu lệnh tiếp theo của bạn (logic doanh nghiệp của bạn) nếu chuỗi truy vấn không có aspxerrorpath.

6

Bạn cũng có thể thử:

if (!Request.QueryString.AllKeys.Contains("aspxerrorpath")) 
    return; 
8

Để kiểm tra một QueryString trống bạn nên sử dụng Request.QueryString.HasKeys tài sản.

Để kiểm tra xem phím có mặt: Request.QueryString.AllKeys.Contains()

Sau đó, bạn có thể nhận được giá trị gia tăng ist và làm bất cứ khác kiểm tra xem bạn muốn, chẳng hạn như isNullOrEmpty vv

+1

'Request.QueryString.AllKeys.Contains()' sẽ thực sự trả về false khi khóa có mặt nhưng không có giá trị. –

3

gì về một cách tiếp cận trực tiếp hơn?

if (Request.QueryString.AllKeys.Contains("mykey") 
1

nghĩ việc kiểm tra bạn đang tìm kiếm là thế này:

if(Request.QueryString["query"] != null) 

Nó trả null bởi vì trong đó chuỗi truy vấn nó không có giá trị cho khóa đó.

+0

Request.QueryString.GetValues ​​(null) .Contains ("truy vấn") – user5690126

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