2012-01-23 11 views
5

Mam prostą funkcję GetPageName(String PageFileName, String LangCode) zdefiniowaną w pliku klasy. Nazwam tę funkcję z pliku default.aspx.cs, W tej funkcji nie mogę użyć Response.Redirect("Error.aspx"), aby pokazać użytkownikowi, że błąd został wygenerowany.Jak mogę użyć response.redirect z wewnątrz funkcji zdefiniowanej w pliku klasy w C# 3.0

Poniżej jest przykład kodeksu

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; 
} 

jakie mogą funkcji określonej w biznesie i dataLayer gdzie chcę pułapka błąd i przekierować użytkownika do strony błędu.

+0

Co to jest błąd. – rerun

+3

To zły projekt. Warstwa biznesowa nie powinna wiedzieć o ASP.Net – SLaks

+2

Masz podatność na atak SQL injection. – SLaks

Odpowiedz

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

aby z niego skorzystać, należy odwołać się do System.Web.

+0

Doskonałe, ale @ StudentDubai - powinieneś pomyśleć o skalowalności i co? (Zagrożenia). Ludzie powiedzieli ci cenne pomysły, o których powinieneś pomyśleć. – Mubarek

+0

Dziękuję. +1 dla szybkiej linii. – SearchForKnowledge

4

Na początek, w jednym miejscu, starasz się używać:

response.redirect(...); 

który i tak nie będzie działać - C# jest wielkość liter.

Jednak większy problem polega na tym, że zwykle Response.Redirect używa właściwości Page.Response, aby uzyskać odpowiedni numer HttpResponse. To nie jest dostępne, gdy nie ma cię na stronie.

Opcje:

  • Zastosowanie HttpContext.Current.Response dostać w odpowiedzi na bieżący odpowiedzi na nakaz wątku
  • przekazać ją do metody jako parametr:

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

(EDYCJA: Jak zauważono w komentarzach, masz także lukę SQL Injection. Użyj sparametryzowanego SQL. przekazywanie wiadomości bezpośrednio do użytkowników może być luką w zabezpieczeniach samą w sobie ...)

+1

Ma jeszcze większe problemy :) – SLaks

+1

@SLaks: True - nie zauważyłem SQL Injection. Eek. –

+0

@Slaks: Mogę sprawdzić SQL injection lub przekonwertować wszystkie sql do procedury Store, która zajmie się wtrysku sql, ale chcę poinformować użytkowników, jeśli błąd jest generowany w warstwie danych, jak mogę to osiągnąć w najlepszy możliwy sposób. Przykład byłby świetny w oparciu o powyższy przykład kodu. – Learning

Powiązane problemy