2013-09-04 28 views
9
public static class HttpRequestHelper 
{ 
    public static string RequestBody() 
    { 
     var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream); 
     bodyStream.BaseStream.Seek(0, SeekOrigin.Begin); 
     var bodyText = bodyStream.ReadToEnd(); 
     return bodyText; 
    } 
} 

Tôi dự định gọi điều này từ ActionFilters để đăng nhập các yêu cầu gửi đến. Tất nhiên có thể có nhiều yêu cầu đồng thời.Đây có phải là cách an toàn để lấy nội dung của yêu cầu HttpContext

Cách tiếp cận này có ổn không?

Trả lời

5

Câu hỏi của bạn có từ quan điểm về đồng thời hoặc ASP.NET Web API nói chung không? Mọi yêu cầu đều có ngữ cảnh riêng và bạn đồng ý với nhiều yêu cầu đang diễn ra song song. Nhưng đây là hai điều để bạn nhìn vào.

(1) Vì bạn đang sử dụng HttpContext, bạn đang tự khóa mình với lưu trữ web (IIS), mà trong nhiều trường hợp sẽ không sao. Nhưng tôi muốn bạn nhận thức được điều này.

(2) Mã của bạn HttpRequestHelper.RequestBody() sẽ hoạt động khi được gọi từ bộ lọc hành động, như bạn đã đề cập. Tuy nhiên, nếu bạn cố gắng gọi điều này từ những nơi khác, hãy nói một trình xử lý tin nhắn, điều này sẽ không hoạt động. Khi tôi nói điều này sẽ không hoạt động, ràng buộc tham số ràng buộc tham số của phương thức action to action sẽ không hoạt động. Bạn sẽ cần phải tìm cách bắt đầu một khi bạn đã làm xong. Lý do nó hoạt động từ bộ lọc hành động là ràng buộc sẽ xảy ra bởi bộ lọc hành động thời gian chạy trong đường ống. Đây là một điều khác mà bạn có thể cần phải biết.

+0

Re. (2) tôi nên thêm bodyStream.BaseStream.Seek (0, SeekOrigin.Begin); sau var bodyText = bodyStream.ReadToEnd(); ? – tom

+0

Re. (1) cảm ơn bạn đã chỉ ra điều đó; Tôi sẽ được lưu trữ trên IIS trong tương lai gần. – tom

+0

Có, bạn có thể tìm cách bắt đầu ở bên an toàn hơn. – Badri

0

Tôi cần sử dụng InputStream of Http Request. Tôi có một ứng dụng WebApp và IOS điều hướng đến trang aspx, nếu yêu cầu url chứa một số thông số tôi đọc thông tin trong cơ sở dữ liệu và nếu tôi không tìm thấy bất kỳ tham số nào trong yêu cầu url, tôi đọc phần thân yêu cầu và tôi hoạt động tốt!

 protected void Page_Load(object sender, EventArgs e) 
     { 
      try 
      { 
       if (string.IsNullOrEmpty(Request.QueryString["AdHoc"]) == false) 
       { 



         string v_AdHocParam = Request.QueryString["AdHoc"]; 
         string [] v_ListParam = v_AdHocParam.Split(new char[] {','}); 

         if (v_ListParam.Length < 2) 
     { 


        DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(WS_DemandeIntervention)); 
        WS_DemandeIntervention response = (WS_DemandeIntervention)jsonSerializer.ReadObject(Request.InputStream); 
.... 
} 


    if (string.IsNullOrEmpty(Request.QueryString["IdBonDeCommande"])==false) 

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