2012-01-23 4 views
5

Tengo una función simple GetPageName(String PageFileName, String LangCode) definida dentro de un archivo de clase. Llamo a esta función desde el archivo default.aspx.cs, en esta función no puedo usar Response.Redirect("Error.aspx") para mostrar al usuario que se ha generado un error.¿Cómo puedo utilizar response.redirect desde dentro de una función definida en el archivo Class en C# 3.0

continuación es ejemplo de Código

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

he definido puede funcionar en Negocios y DataLayer donde quiero para interceptar el error y redirigir usuario a la página de error.

+0

¿Cuál es el error. – rerun

+3

Eso es un mal diseño. La capa empresarial no debe saber acerca de ASP.Net – SLaks

+2

Tiene una vulnerabilidad de inyección SQL. – SLaks

Respuesta

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

para utilizarlo, su conjunto debe hacer referencia a System.Web.

+0

Excelente, pero @ StudentDubai- debes pensar en la escalabilidad y qué? (Riesgos) La gente te dijo ideas preciosas en las que deberías pensar. – Mubarek

+0

Gracias. +1 para la línea rápida. – SearchForKnowledge

4

Para empezar, en un lugar que está tratando de utilizar:

response.redirect(...); 

que no funcionaba de todos modos - C# entre mayúsculas y minúsculas.

Pero el problema más grande es que normalmente Response.Redirect utiliza la propiedad Page.Response para obtener el relevante HttpResponse. Eso no está disponible cuando no estás en una página, por supuesto.

Opciones:

  • Uso HttpContext.Current.Response para llegar a la respuesta de la respuesta actual para el subproceso en ejecución
  • paso en el método como un parámetro:

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

(EDITAR: Como se señaló en los comentarios, también tiene una vulnerabilidad de inyección SQL. Utilice SQL parametrizado. Los mensajes de recepción directamente a los usuarios pueden ser una vulnerabilidad de seguridad en sí mismos ...)

+1

Tiene problemas aún mayores :) – SLaks

+1

@SLaks: Es cierto: no se detectó la inyección de SQL. Eek. –

+0

@Slaks: Puedo verificar la inyección SQL o convertir todos los sql a Store Procedure que se encargarán de la inyección sql, pero quiero informar a los usuarios si se genera un error en la capa de datos, ¿cómo puedo lograrlo de la mejor manera posible? El ejemplo sería excelente basado en el ejemplo de código anterior – Learning

Cuestiones relacionadas