如何在c#3.0中的类文件中定义的函数中使用response.redirect

如何在c#3.0中的类文件中定义的函数中使用response.redirect,c#,asp.net,error-handling,C#,Asp.net,Error Handling,我在类文件中定义了一个简单的函数GetPageName(stringPageFileName,stringLangCode)。我从default.aspx.cs文件调用此函数,在此函数中,我无法使用Response.Redirect(“Error.aspx”)向用户显示已生成错误 下面是代码示例 public static string GetPageName(String PageFileName, String LangCode) { String sLangCode = Requ

我在类文件中定义了一个简单的函数
GetPageName(stringPageFileName,stringLangCode)
。我从
default.aspx.cs
文件调用此函数,在此函数中,我无法使用
Response.Redirect(“Error.aspx”)
向用户显示已生成错误

下面是代码示例

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;
}
我可能在Business and Datalayer中定义了函数,我希望在其中捕获错误并将用户重定向到错误页面

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

要使用它,您的程序集应该参考System.Web。

首先,在您尝试使用的一个地方:

response.redirect(...);
这无论如何都不起作用-C#区分大小写

但更大的问题是,通常
Response.Redirect
使用该属性获取相关数据。当然,当您不在页面中时,这是不可用的

选项:

  • 使用
    HttpContext.Current.Response
    获取执行线程当前响应的响应
  • 将其作为参数传递到方法中:

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

(编辑:如评论中所述,您还存在SQL注入漏洞。请使用参数化SQL。同样,直接向用户显示异常消息本身可能是一个安全漏洞…

这是一个糟糕的设计。业务层不应该知道ASP.NET您有SQL注入漏洞。为什么让业务层和/或数据层控制UI?为什么不让层/类返回一个错误,并让表示层/应用程序决定该做什么?您应该使用更通用的错误页面,最好是ELMAH。用户不应该看到错误详细信息。错误详细信息可能包含敏感信息。然而,正确的方法是让异常传播。他有更大的问题:)@SLaks:True-没有发现SQL注入。Eek.@Slaks:我可以检查SQL注入或将所有SQL转换为存储过程,这将负责SQL注入,但我想通知用户,如果在数据层生成错误,我如何以最佳方式实现这一点。基于上述代码的示例将非常有用example@StudentDubai:存储的进程不停止SQL注入;您需要使用参数。您应该从业务层抛出异常,并使用来显示错误页。@StudentDubai:您不检查SQL注入,而是首先使用参数化查询来避免它们。您当然应该通知用户出了问题,但这并不意味着您必须直接公开异常消息。它是为开发者而不是用户设计的。您通常也不应该捕获普通的
异常
——捕获您期望并能够处理的异常;让其他异常向上传播,在web配置中指定顶级异常处理程序以显示一般错误消息;用ELMAH.Excelle之类的工具记录诊断的详细信息,但是@StudentDubai-你应该考虑可伸缩性和什么?(风险)。人们告诉你应该考虑的宝贵想法。谢谢+快线1号。