我如何访问一个webmethod中的会话?

我可以在WebMethod使用会话值吗?

我已经尝试使用System.Web.Services.WebMethod(EnableSession = true)但是我无法像本例中那样访问Session参数:

  [System.Web.Services.WebMethod(EnableSession = true)] [System.Web.Script.Services.ScriptMethod()] public static String checaItem(String id) { return "zeta"; } 

这里是调用webmethod的JS:

  $.ajax({ type: "POST", url: 'Catalogo.aspx/checaItem', data: "{ id : 'teste' }", contentType: 'application/json; charset=utf-8', success: function (data) { alert(data); } }); 

您可以使用:

 HttpContext.Current.Session 

但是,除非你指定了EnableSession=true否则它将是null

 [System.Web.Services.WebMethod(EnableSession = true)] public static String checaItem(String id) { return "zeta"; } 

有两种方法启用Web方法的会话:

 1. [WebMethod(enableSession:true)] 2. [WebMethod(EnableSession = true)] 

第一个构造函数参数enableSession:true不适用于我。 第二个与EnableSession属性起作用。

你可以尝试像这样[WebMethod] public static void MyMethod(string ProductID,string Price,string Quantity,string Total)//添加新的参数 尝试{

  DataTable dt = (DataTable)HttpContext.Current.Session["aaa"]; if (dt == null) { DataTable dtable = new DataTable(); dtable.Clear(); dtable.Columns.Add("ProductID");// Add new parameter Here dtable.Columns.Add("Price"); dtable.Columns.Add("Quantity"); dtable.Columns.Add("Total"); object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here dtable.Rows.Add(trow); HttpContext.Current.Session["aaa"] = dtable; } else { object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here dt.Rows.Add(trow); HttpContext.Current.Session["aaa"] = dt; } } catch (Exception) { throw; } } 

如果会话已启用,请查看您的web.config。 这篇文章可能会给出更多的想法。 https://stackoverflow.com/a/15711748/314373

对于启用会话,我们必须使用[WebMethod(enableSession:true)]

 [WebMethod(EnableSession=true)] public string saveName(string name) { List<string> li; if (Session["Name"] == null) { Session["Name"] = name; return "Data saved successfully."; } else { Session["Name"] = Session["Name"] + "," + name; return "Data saved successfully."; } } 

现在使用会话来检索这些名字,我们可以这样做

 [WebMethod(EnableSession = true)] public List<string> Display() { List<string> li1 = new List<string>(); if (Session["Name"] == null) { li1.Add("No record to display"); return li1; } else { string[] names = Session["Name"].ToString().Split(','); foreach(string s in names) { li1.Add(s); } return li1; } } 

所以它会从会话中收回所有的名字并显示。