Jquery的Ajax(POST模式)一般处理程序引用IRequiresSessionState接收不到传值

霜影 2019-01-04 02:14:25
问题描述:
自己做的一个项目(开发中,C#)用了electron,来桌面化网站。本机安装node.js;
数据交互都是用jQuery的Ajax来实现的;
前段时间都一直好好的,但后来好像是改动了些其他页面关联的js脚本代码,当时记的运行也正常;
但后来隔了段时间,再运行,第一个登录页面的ajax就出问题了,一般处理程序(.ashx)获取不到ajax传过来的参数值了!
后来写了最简单的测试代码来实验是否能接收到到参数,但还是不行,接收到的参数值始终都是NULL;如下图:

JS测试脚本:

function abcd() {
try {
$.ajax({
url: "../../Handlers/Handler1.ashx?rn=" + GetRandomNum(10),
type: "POST",
dataType: "json",
async: true,
data: {
canshu: "LXX"
},
//traditional: true,
success: function (data, status) {
if (data) {
var ab = data;
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
ShowErrMsg("errMsg", textStatus, true);
}
});
} catch (e) {
alert(e.message);
}
}

页面调用脚本(页面加载时调用,只看第一行就行):

<body onload="abcd();" style="overflow:hidden;"><%--GetPageSize();--%>
<form id="form1" runat="server">
<div class="divMainBody">

一般处理程序代码(不用关心返回结果,只看变量abc的值就行):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace TerminalManageSystem.Handlers
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler, IRequiresSessionState
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string abc = context.Request["canshu"];
context.Response.Write("Hello World");
}

public bool IsReusable
{
get
{
return false;
}
}
}
}

运行结果截图:


-------------------------分割线------------------------------------

后来发现有两种方式能让一般处理程序接收到传递的参数值:
1、脚本Ajax改为GET模式,就能正常接收;
2、或者一般处理程序把IRequiresSessionState继承去掉,也能接收到参数值;
但问题是之前一开始都是很正常的,而且我后来又新建了一个项目,简单写了个ajax,post和IRequiresSessionState都不影响!
网上查了很多资料,基本没有这方面的帖子;找到两个相同问题的帖子,但都没帮助;一个楼主解决了但没说怎么解决的,一个是换了种方式,避开使用ajax了……
所以,只能到论坛求助了,还望各位大拿给支招,最好能告知是什么原因,以及该怎么解决……非常感谢!
...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
霜影 2019-01-23
  • 打赏
  • 举报
回复
已经解决了,最后发现是配置文件的问题!
配置文件里我加了一个节点:
<sessionState mode="StateServer" cookieless="false" timeout="540" />

当时cookieless="true",就是这个,导致Session的ID放到了URL里,所以才导致的不正常。
应该是当时查资料时,记错了,给设成true了。
希望后来有相同问题的朋友,可以先查下你的配置文件里是否有这一项!
霜影 2019-01-04
  • 打赏
  • 举报
回复
引用 3 楼 丰云 的回复:
进一步解释一下,IRequiresSessionState接口,原本是提供给asp.net服务端程序用于控制asp.net网页的,设计之初本就不是给webapi服务使用的,只是后面的人不明就里,只知道继承这个接口就可以使用session,却忽略了他的局限性和影响范围,才导致后面这些问题

非常感谢热心解答!
丰云 2019-01-04
  • 打赏
  • 举报
回复
进一步解释一下,IRequiresSessionState接口,原本是提供给asp.net服务端程序用于控制asp.net网页的,设计之初本就不是给webapi服务使用的,只是后面的人不明就里,只知道继承这个接口就可以使用session,却忽略了他的局限性和影响范围,才导致后面这些问题
丰云 2019-01-04
  • 打赏
  • 举报
回复
另外,启用了session,第一次访问,会加载SessionID,导致链接被重置,所以取不到参数。 因此,可以考虑第一次访问,先发送一个无参的get请求,回避掉这个问题,应该也可以解决了
丰云 2019-01-04
  • 打赏
  • 举报
回复
继承IRequiresSessionState目的是为了使用session,但session完全可以用cache替代,所以,我建议你去掉IRequiresSessionState的继承,然后在需要用session的地方,用cache来替代

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧