2010-08-05 31 views
7

Cập nhậtLàm cách nào để xác định xem yêu cầu có phải là kết quả của một lần đăng lại không?

Tôi đang thực hiện một giải pháp trang tùy chỉnh bộ nhớ đệm và tôi không muốn yêu cầu để được lưu trữ hoặc lấy từ cache nếu nó đáp ứng với một gửi biểu mẫu hoặc một số loại asp.net postback .

Tôi đang cố gắng tìm hiểu xem HttpRequest hiện tại có phải là postback hay không. Có cách nào để làm điều này bên ngoài ngữ cảnh của một trang hoặc điều khiển người dùng khác không? Trong otherwords nếu tôi đang ở trong một HttpModule tôi không có quyền truy cập vào this.IsPostBack nhưng tôi vẫn cần phải xác định nếu nó là trong thực tế, một postback.

Ngoài ra, đăng lại luôn là yêu cầu "Đăng" hay được xác định bằng cách chứa biểu mẫu?

cảm ơn!

+0

Bạn có thể vui lòng xây dựng trên "bên ngoài ngữ cảnh của trang hoặc điều khiển người dùng khác" không? – Vaibhav

+1

Bạn không thể có một postback mà không có một trang ASP.NET. Nếu không, tất cả những gì bạn có là một POST HTTP thông thường. –

+0

'IsPostBack' có ý nghĩa gì đối với bạn chính xác? Giống như, chỉ khi dữ liệu được truyền cho mô-đun ... hay cái gì? –

Trả lời

9

Kiểm tra thuộc tính Method của HttpWebRequest. Đăng lại phải được đánh dấu là POST trong số Method.

Ngoài ra, cách bạn đã thực hiện điều đó trong trường học cũ là kiểm tra các tham số sau dự kiến ​​trong phần nội dung của thông báo HTTP (Request.Form). Bạn có thể kiểm tra nội dung của yêu cầu cho dữ liệu trông giống như tham số đăng lại. Tôi không chắc bạn đang làm việc với đối tượng nào, nhưng nếu đó là HttpWebRequest, bạn có thể kiểm tra luồng yêu cầu từ phương thức GetResponseStream() của đối tượng.

6
if (Request.ServerVariables["REQUEST_METHOD"] == "POST") { 
    // This is a POST 
} 
+0

Ben McCormack có câu trả lời tốt hơn, nhưng về cơ bản là giống nhau. – jessegavin

1

Bạn có thể lấy một tham chiếu đến trang hiện tại: Get current System.Web.UI.Page from HttpContext?

Sau đó, bạn có thể kiểm tra tài sản Page.IsPostBack.

+0

Đây là tìm kiếm tốt và tôi đang bỏ phiếu, nhưng nó vẫn không hoạt động vì tôi đang khai thác đường dẫn trước khi trình xử lý được liên kết với yêu cầu và do đó HttpContext.Current.Handler luôn là null. – Micah

+0

Trong bước nào của việc hiển thị trang, bạn có cần phải biết liệu trang có được đăng lại hay không? – David

3

Một HTTPHandler sẽ có quyền truy cập vào HTTPContext hiện tại. Bạn sử dụng nó để kiểm tra một vài thuộc tính (Request.RequestType, Request.URLReferrer) và tự quyết định xem đó có phải là PostBack hay không.

5

Quy trình tĩnh sau đây sẽ có thể xác định xem yêu cầu hiện tại có phải là đăng lại hay không. Tuy nhiên, nó sẽ chỉ hoạt động nếu bạn đang thực hiện một trang ASPX hoặc dẫn xuất chúng.

public class PostBackUtility 
{ 
    public static Boolean IsPagePostBack 
    { 
     get 
     { 
      Page pageHandler = HttpContext.Current.CurrentHandler as Page; 
      if (pageHandler == null) return false; 
      return pageHandler.IsPostBack; 
     } 
    } 
} 

cũng nên lưu ý rằng CurrentHandler có thể chưa được khởi tạo tùy thuộc vào giai đoạn nào trong vòng đời yêu cầu bạn cố gắng để đánh giá IsPagePostBack. Tôi tin rằng phương pháp này sẽ chỉ hợp lệ giữa HttpApplication.PostMapRequestHandlerHttpApplication.ReleaseRequestState.

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