ASP.NET WebMethod存Session逗号分隔值时myValues为null如何解决?
问题原因
- 每次调用直接覆盖Session值,未做拼接逻辑:原代码每次执行时直接将当前
Widget+','赋值给Session变量,没有读取已存储的历史值做拼接,最终只会保留最后一次传入的参数值,无法得到多参数拼接的效果。 - 方法无返回值导致前端无法拿到结果:当前方法声明为
void类型,没有将myValues的值返回给前端Ajax请求,前端接收不到返回内容自然显示为空。 - Session丢失导致空值:如果前端Ajax请求未携带Session Cookie(比如跨域请求未配置凭证传递),每次请求都会生成全新的Session,历史存储的值完全丢失,此时用
as string转换未赋值的Session变量就会返回null。
修复方案
首先调整后端代码,追加拼接逻辑、增加返回值、补充空值判断:
[WebMethod(EnableSession = true)] public static string GetDahboardWidgetRefresh(int Widget) { // 读取原有Session值,为空则默认赋值为空字符串 string historyValue = HttpContext.Current.Session["WidgetRefId"] as string ?? string.Empty; // 拼接新传入的参数 string currentValue = historyValue + Widget + ","; // 回写Session HttpContext.Current.Session["WidgetRefId"] = currentValue; // 返回拼接后的结果给前端 return currentValue; }
额外注意事项:
- 若为跨域Ajax请求,需要在前端请求配置中添加
withCredentials: true,保证每次请求携带Session Cookie,避免Session丢失。 - 注意Session键名的大小写不要写错,同时如果应用配置的是InProc模式的Session,应用池重启后已存储的Session值会被清空。
内容的提问来源于stack exchange,提问作者ASHISH ANAND
相关产品推荐
相关产品推荐

