2010-08-10 66 views

Trả lời

13

Request["id"] nhận giá trị từ các bộ sưu tập QueryString, Form, Cookies hoặc ServerVariables. Thứ tự mà chúng được tìm kiếm không được chỉ định trong tài liệu nhưng khi bạn xem mã nguồn, bạn sẽ thấy rằng đó là thứ tự mà chúng được đề cập đến.

Vì vậy, nếu bạn biết nơi biến của bạn cư trú, mà bạn thường làm, tốt hơn là sử dụng tùy chọn cụ thể hơn.

+0

-1 khỏi tôi, bây giờ, như các tài liệu hướng dẫn * không * xác định thứ tự mà các bộ sưu tập được truy cập .Nếu các tài liệu phù hợp với việc thực hiện, đó là may mắn tinh khiết, như tôi đã lưu ý trong câu trả lời của tôi, nó có thể thay đổi. Xóa "theo thứ tự này" và tôi sẽ rất vui khi xóa -1 =) – Rob

+0

-1 bị xóa, có một chút tài liệu khác tại http://msdn.microsoft.com/en-us/library/ms524948 % 28VS.90% 29.aspx (nhờ @ John cho câu trả lời của mình chỉ ra nó) cho biết rằng các bộ sưu tập được tìm kiếm theo một thứ tự cụ thể. Nó sẽ được tốt đẹp nếu MS đề cập rằng trong tài liệu đó là cụ thể cho Request.Item, eh! : -/ – Rob

+1

Tôi đã xóa phần 'theo thứ tự này' vì điều này không có giấy tờ. Nhìn vào mã nguồn, tuy nhiên, bạn sẽ thấy rằng nó sử dụng thứ tự được chỉ định. Nhưng bạn nói đúng, đây là một chi tiết thực hiện :) –

1

Request.QueryString["id"] sẽ trả về giá trị của một mục trong chuỗi truy vấn có một chìa khóa của id, trong khi Request["id"] sẽ trả về một mục từ một trong Request.QueryString, Request.Form, Request.Cookies, hoặc Request.ServerVariables.

Đó là đáng nói đến là documentation cho Request.Item (đó là những gì bạn đang thực sự truy cập khi bạn gọi Request["id"]) không không xác định thứ tự mà các bộ sưu tập sẽ được tìm kiếm, vì vậy bạn về mặt lý thuyết có thể nhận được một kết quả khác nhau tùy thuộc bạn đang chạy phiên bản asp.net nào.

Nếu bạn biết rằng giá trị bạn muốn là trong chuỗi truy vấn của bạn, nó luôn luôn tốt hơn để sử dụng Request.QueryString["id"] truy cập vào nó, chứ không phải là Request["id"].

1

Theo documentation các HttpRequest indexer

Các QueryString, Form, Cookies, hoặc ServerVariables bộ sưu tập thành viên định trong tham số quan trọng.

Tôi muốn sử dụng Request.QueryString["id"] vì nó rõ ràng hơn khi giá trị đến từ đâu.

1

Request.QueryString ["id"] nhìn vào bộ sưu tập được truyền cho mỗi QueryString. Request.Item ["id"] xem xét tất cả các Bộ sưu tập (QueryString, Form, Cookies hoặc ServerVariables). Do đó nên sử dụng thuộc tính QueryString khi có thể vì nó nhỏ hơn.

3

Bộ sưu tập yêu cầu là bộ siêu truy vấn QueryString, cùng với một số dữ liệu khác liên quan đến yêu cầu hiện tại.

để "tốt hơn" - tôi khuyên bạn nên chính xác và rõ ràng (tức là sử dụng QueryString) để tránh yếu tố bất ngờ, khi bạn nhận được kết quả không mong muốn chỉ để nhận ra rằng bạn đã sử dụng khóa yêu cầu không cung cấp giá trị chuỗi truy vấn, nhưng nó tồn tại trên một số bộ sưu tập khác.

+0

+1 để trả lời toàn bộ câu hỏi. Tôi chắc chắn đã thấy mã bị nhầm lẫn khi một cái gì đó cuối cùng được đọc từ cookie thay vì chuỗi truy vấn. –

1

Theo Reflector.Net, Request [ "id"] được định nghĩa là:

public string this[string key] 
{ 
    get 
    { 
     string str = this.QueryString[key]; 
     if (str != null) 
     { 
      return str; 
     } 
     str = this.Form[key]; 
     if (str != null) 
     { 
      return str; 
     } 
     HttpCookie cookie = this.Cookies[key]; 
     if (cookie != null) 
     { 
      return cookie.Value; 
     } 
     str = this.ServerVariables[key]; 
     if (str != null) 
     { 
      return str; 
     } 
     return null; 
    } 
} 
+0

Bạn đang dựa vào chi tiết triển khai tại đây ... – Rob

+0

@Rob Như trái ngược với việc dựa vào tài liệu. Bạn sẽ tin tưởng điều gì? :) – bzlm

+0

@ bzlm, thứ tự tìm kiếm là * không có giấy tờ *, do đó dựa vào đó là không khôn ngoan nhất, có khả năng thảm khốc tồi tệ nhất. Nếu một cái gì đó không được tài liệu, bạn phải giả định rằng nó * có thể thay đổi tại bất kỳ điểm nào *. – Rob

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