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

本文关键字:内部 函数 redirect response 定义 文件 c#3 Class | 更新日期: 2023-09-27 18:21:18

我在类文件中定义了一个简单的函数GetPageName(String PageFileName, String LangCode)。我从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和Datalayer中定义了函数,我想在其中捕获错误并将用户重定向到error页面。

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

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

要使用它,您的程序集应该引用System.Web.

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

response.redirect(...);

这无论如何都不起作用-C#是区分大小写的。

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

选项:

  • 使用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。同样,直接向用户显示异常消息本身也可能是一个安全漏洞…)