2012-01-23 7 views
5

Ho una semplice funzione GetPageName(String PageFileName, String LangCode) definita all'interno di un file di classe. Chiamo questa funzione dal file default.aspx.cs, in questa funzione non sono in grado di utilizzare Response.Redirect("Error.aspx") per mostrare all'utente che l'errore è stato generato.Come posso utilizzare response.redirect dall'interno di una funzione definita nel file di classe in C# 3.0

Di seguito è esempio di codice

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

Ho può funzionare definito in Business e dataLayer dove voglio intercettare l'errore e reindirizzare utente alla pagina di errore.

+0

Qual è l'errore. – rerun

+3

Questo è un cattivo design. Il livello aziendale non deve conoscere ASP.Net – SLaks

+2

Si ha una vulnerabilità di SQL injection. – SLaks

risposta

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

per utilizzare il proprio assieme dovrebbe fare riferimento a System.Web.

+0

Eccellente, ma @ StudentDubai- dovresti pensare a scalabilità e whatif? (rischi). La gente ti ha detto idee preziose a cui dovresti pensare. – Mubarek

+0

Grazie. +1 per la linea veloce. – SearchForKnowledge

4

Per cominciare, in un luogo che stai cercando di utilizzare:

response.redirect(...); 

che non avrebbe funzionato in ogni caso - C# è case-sensitive.

Ma il problema più grande è che normalmente Response.Redirect utilizza la proprietà Page.Response per ottenere il relativo HttpResponse. Questo non è disponibile quando non si è in una pagina, ovviamente.

Opzioni:

  • Usa HttpContext.Current.Response per arrivare alla risposta per la risposta corrente per il thread in esecuzione
  • passarlo al metodo come parametro:

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

(MODIFICA: come indicato nei commenti, si ha anche una vulnerabilità di SQL Injection. Si prega di utilizzare SQL parametrizzato. messaggi di cue direttamente agli utenti possono essere di per sé una vulnerabilità di sicurezza ...)

+1

Ha problemi ancora più grandi :) – SLaks

+1

@SLaks: True: non ha individuato SQL Injection. Eek. –

+0

@Slaks: Posso verificare l'iniezione SQL o convertire tutto sql in Store Procedure che si occuperà di SQL injection ma voglio informare gli utenti se viene generato un errore nel livello dati come posso ottenerlo nel miglior modo possibile. L'esempio sarebbe ottimo in base all'esempio di codice precedente – Learning

Problemi correlati