2012-01-23 18 views
5

Tôi có hàm đơn giản GetPageName(String PageFileName, String LangCode) được định nghĩa bên trong tệp lớp. Tôi gọi chức năng này từ default.aspx.cs tệp, Trong chức năng này tôi không thể sử dụng Response.Redirect("Error.aspx") để hiển thị cho người dùng rằng lỗi đã được tạo.Làm thế nào tôi có thể sử dụng response.redirect từ bên trong một hàm được định nghĩa trong tệp Lớp trong C# 3.0

Dưới đây là ví dụ về Mã

public static string GetPageName(String PageFileName, String LangCode) 
{ 
    String sLangCode = Request("Language"); 
    String pgName = null; 
    if (sLangCode.Length > 6) 
    { 
     Reponse.Redirect("Error.aspx?msg=Invalid Input"); 
    } 
    else 
    { 
     try 
     {    
      String strSql = "SELECT* FROM Table"; 

      Dataset ds = Dataprovider.Connect_SQL(strSql); 

     } 
     catch(Exception ex) 
     { 
      response.redirect("Error.aspx?msg="+ex.Message); 
     } 
    } 
    return pgName; 
} 

Tôi đã có thể hoạt động được xác định trong kinh doanh và dataLayer nơi mà tôi muốn bẫy lỗi và chuyển hướng người dùng đến trang Lỗi.

+0

Lỗi là gì. – rerun

+3

Đó là thiết kế tồi. Lớp doanh nghiệp không nên biết về ASP.Net – SLaks

+2

Bạn có lỗ hổng SQL injection. – SLaks

Trả lời

14
HttpContext.Current.Response.Redirect("error.aspx"); 

để sử dụng nó, assembly của bạn nên tham chiếu System.Web.

+0

Tuyệt vời, nhưng @ StudentDubai- bạn nên suy nghĩ khả năng mở rộng và whatif? (Rủi ro). Folks nói với bạn những ý tưởng quý giá bạn nên suy nghĩ. – Mubarek

+0

Cảm ơn bạn. 1 cho dòng nhanh. – SearchForKnowledge

4

Đối với một sự khởi đầu, ở một nơi bạn đang cố gắng sử dụng:

response.redirect(...); 

đó sẽ không làm việc anyway - C# là trường hợp nhạy cảm.

Nhưng vấn đề lớn hơn là bình thường Response.Redirect sử dụng thuộc tính Page.Response để nhận số HttpResponse có liên quan. Điều đó không có sẵn khi bạn không ở trong một trang, tất nhiên.

Options:

  • Sử dụng HttpContext.Current.Response để có được câu trả lời cho các phản ứng hiện tại cho các chủ đề thực hiện
  • đèo nó vào phương pháp như một tham số:

    // Note: parameter names changed to follow .NET conventions 
    public static string GetPageName(String pageFileName, String langCode, 
               HttpResponse response) 
    { 
        ... 
        response.Redirect(...); 
    } 
    

(EDIT: Như đã lưu ý trong các bình luận, bạn cũng có một lỗ hổng SQL Injection. Vui lòng sử dụng SQL được tham số hóa. tin nhắn lừa đảo trực tiếp cho người dùng có thể là lỗ hổng bảo mật trong chính nó ...)

+1

Ông có vấn đề lớn hơn :) – SLaks

+1

@SLaks: Đúng - đã không phát hiện ra SQL Injection. Eek. –

+0

@ Slaks: Tôi có thể kiểm tra SQL injection hoặc chuyển đổi tất cả sql sang Store Procedure sẽ xử lý việc tiêm sql nhưng tôi muốn thông báo cho người dùng nếu lỗi được tạo trong lớp dữ liệu như thế nào tôi có thể đạt được điều đó theo cách tốt nhất có thể. Ví dụ sẽ là tuyệt vời dựa trên ví dụ mã trên – Learning

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