Czy mogę używać wartości sesji wewnątrz WebMethod
?
Próbowałem użyć, System.Web.Services.WebMethod(EnableSession = true)
ale nie mogę uzyskać dostępu do parametru sesji, jak w tym przykładzie :
[System.Web.Services.WebMethod(EnableSession = true)]
[System.Web.Script.Services.ScriptMethod()]
public static String checaItem(String id)
{
return "zeta";
}
oto JS, który wywołuje metodę web:
$.ajax({
type: "POST",
url: 'Catalogo.aspx/checaItem',
data: "{ id : 'teste' }",
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data);
}
});
Odpowiedzi:
Możesz użyć:
Ale tak będzie,
null
chyba że określisz równieżEnableSession=true
:[System.Web.Services.WebMethod(EnableSession = true)] public static String checaItem(String id) { return "zeta"; }
źródło
Istnieją dwa sposoby włączenia sesji dla metody internetowej:
1. [WebMethod(enableSession:true)] 2. [WebMethod(EnableSession = true)]
Pierwszy z argumentem konstruktora
enableSession:true
nie działa dla mnie. Drugi zEnableSession
remontami nieruchomości.źródło
WebMethodAttribute(Boolean)
w dokumentach.Do włączenia sesji musimy użyć [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."; } }
Teraz, aby odzyskać te nazwy za pomocą sesji, możemy przejść w ten sposób
[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; } }
więc pobierze wszystkie nazwy z sesji i pokaże.
źródło
Możesz spróbować w ten sposób [WebMethod] public static void MyMethod (string ProductID, string Price, string Quantity, string Total) // Dodaj nowy parametr tutaj {db_class Connstring = new db_class (); próbować {
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; } }
źródło
Spójrz na siebie web.config, jeśli sesja jest włączona. Ten post może dać więcej pomysłów. https://stackoverflow.com/a/15711748/314373
źródło
W języku C # w kodzie za stroną przy użyciu metody internetowej
[WebMethod(EnableSession = true)] public static int checkActiveSession() { if (HttpContext.Current.Session["USERID"] == null) { return 0; } else { return 1; } }
Na stronie aspx
$.ajax({ type: "post", url: "", // url here contentType: "application/json; charset=utf-8", dataType: "json", data: '{ }', crossDomain: true, async: false, success: function (data) { returnValue = data.d; if (returnValue == 1) { } else { alert("Your session has expired"); window.location = "../Default.aspx"; } }, error: function (request, status, error) { returnValue = 0; } });
źródło