非静态字段方法需要对象引用或 属性 'page.request'

an object reference is required for the non-static field method or property 'page.request'

作为初学者,我正处于学习 ASP.NET Webforms 的初始阶段,我正在处理这段代码,我需要从静态方法中调用 Request.QueryString。但我无法做到这一点,而是抛出一个编译错误

这是我的代码块

[System.Web.Services.WebMethod]
    public static string GetProductImgList(string ProductCode)
    {
        try
        {
            string ProductId = Request.QueryString["ID"].ToString(); //error
            string BatchId = Request.QueryString["Batch"].ToString();//error
            string UserId = Request.QueryString["UID"].ToString();//error

            dalOnlineShop objdalOnlineShop = new dalOnlineShop();
            DataTable dt = objdalOnlineShop.GetProductAllImgs(ProductCode);
            string ImgNames = "";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows.Count == i + 1)
                {
                    ImgNames += dt.Rows[i]["SmallImgPath"].ToString() + ",";
                    ImgNames += dt.Rows[i]["ImgPath"].ToString();
                }
                else
                {
                    ImgNames += dt.Rows[i]["SmallImgPath"].ToString() + ",";
                    ImgNames += dt.Rows[i]["ImgPath"].ToString() + ",";
                }
            }
            return ImgNames;
        }
        catch (Exception ex) { }
        return "";
    }

您的问题是您将此方法设为静态。静态意味着它不依赖于特定实例。此代码引用的 Request 属性 是一个实例 属性。这意味着此 属性(可以)对每个实例具有不同的值。

ASP.NET 将为每个进入的请求创建此 class 的新实例,这将使共享信息变得更加容易,例如 RequestResponseContext, ...针对特定请求,因此您不必考虑将所有这些捆绑在一起。