【问题标题】:jQuery POST passing null string on server (ASP.NET)jQuery POST 在服务器上传递空字符串(ASP.NET)
【发布时间】:2015-08-17 09:36:12
【问题描述】:

我有一个 ASP.NET 应用程序通过 AJAX 将数据发送到我的应用程序的处理程序。 这在本地调试时可以正常工作,但是一旦我将解决方案部署到服务器,处理程序只会收到一个空字符串。我尝试摆弄 contentType 和 dataType,但没有运气。

这是我目前的代码。

发送页面的aspx,而“myData”是一个简单的字符串:

$.ajax({
    type: "POST",
    url: "handlers/changeRiskGroup.ashx",

    data: myData,

    // tried all those content/dataTypes without any luck
    //contentType: "text/plain",
    //dataType: "text",
    //contentType: "application/json; charset=utf-8",
    //dataType: "json",

    error: function (xhr, status, error) {
        console.log(xhr.responseText);
    },

    success: function (msg) {
        console.log(msg);
    }
});

.ashx.cs 的接收处理程序:

public void ProcessRequest(HttpContext context) {
    //string data = new StreamReader(context.Request.InputStream).ReadToEnd();

    var data = String.Empty;

    context.Request.InputStream.Position = 0;
    using(var inputStream = new StreamReader(context.Request.InputStream)) {
        data = inputStream.ReadToEnd();
    }


    if (data != "") {
        // doing something with my data here. 

        // this is never reached while on the server, but works fine locally!
    } else {
        context.Response.Write("Please supply data to the risk group service!");
    }
}
public bool IsReusable {
    get {
        return false;
    }
}

}

.ashx.cs 文件中的data 变量在本地调试时填充,但在服务器上总是“”。我不知道为什么。

【问题讨论】:

  • 您是否验证了客户端(Jquery)是否正在使用 Fiddler 向已部署的版本发送相同的数据?
  • 您的本地设置是否与服务器上的设置相同?如果您使用相同的代码和相同的浏览器,那么您正在使用的服务器配置不同是可行的,这就是需要更新或摆弄的地方
  • 你能举例说明myData的值吗?
  • @Mendhak - 是的,发送页面有正确的数据,我刚刚使用 fiddler 进行了验证。
  • @ZathrusWriter - 到目前为止是的。哪些设置主题会影响到服务器的 POST?

标签: c# jquery asp.net


【解决方案1】:
var para={};
para.myData="abcd"

$.ajax({
    type: "POST",
    url: "handlers/changeRiskGroup.ashx",
    data: para,

    error: function (xhr, status, error) {
        console.log(xhr.responseText);
    },
    success: function (msg) {
        console.log(msg);
    }
});

从服务器端

string myData=contect.Request.Form["myData"].toString();

【讨论】:

  • 试过你的解决方案,在本地运行良好。部署在服务器上时 Request.Form["myData"] 为空。
  • 如果它在本地工作,那么它必须在服务器上工作。可能是网址和帖子会有所不同。
  • 这也是我的想法——它基本上是正确的,但在某个地方可能存在一个小问题。处理程序的 URL 是一个较早的问题('/handlers/myhandler.ashx' 在本地工作,但不在服务器上,将其更改为 'handlers/myhandler.ashx' 确实有效)。如果没有人知道,我将设置一个测试页面 + 处理程序来尝试缩小问题范围 - 但这意味着很多工作,因此我希望有人之前遇到过这个(微不足道的???)问题。
  • ..这真的是一个无法解决的问题吗?!
【解决方案2】:

很简单,我花了大约 20 个小时才弄清楚。在这里找到答案:Web service returns "301 error moved permanently" in production environment

简而言之,我在我的项目中创建了一个空白页面,以确保没有插件等干扰 jQuery 执行。此外,我创建了一个非常简单的掩码来将某些数据提交到处理程序 URL。在这个掩码中,我改变了 POST 数据的不同方式,当我尝试将 POST 实现为 [WebMethod] 时,我终于得到了一个线索,因为响应是来自 WebMethod 的“301 永久移动”。因此我可以开始调查并发现我的服务器正在小写 url,显然 jQuery/HTTP 不喜欢那样。

我希望这篇文章可以帮助其他遇到类似问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多