konrad_pe
konrad_pe

Reputation: 1190

jQuery POST passing null string on server (ASP.NET)

I have an ASP.NET application sending data through AJAX to a handler withing my application. This works as it should when debugging locally, but as soon as I deploy the solution to the server, the handler only receives an empty string. I tried fiddling around with contentType and dataType, but without luck.

Here is my code so far.

aspx of the sending page, while "myData" is a simple string:

$.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 of the receiving handler:

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;
    }
}

}

The data variable in the .ashx.cs file is filled when debugging locally, but always "" on the server. I have no clue why.

Upvotes: 0

Views: 724

Answers (2)

konrad_pe
konrad_pe

Reputation: 1190

Easy, just took me ~20 hours to figure out. Found the answer here: Web service returns "301 error moved permanently" in production environment

In short, I created a blank page within my project to ensure no plugins etc were interfering with the jQuery execution. Further, I created a very simple mask to submit certain data to the handler URL. Within this mask I varied different ways to POST data, when I tried implementing the POST as a [WebMethod] I finally got a clue, as the response was "301 moved permanently" from the WebMethod. Therefore I could start investigating and found out that my server was lowercasing the urls, obviously jQuery/HTTP does not like that.

I hope this post helps others struggling with similar problems.

Upvotes: 0

Minhaj
Minhaj

Reputation: 188

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);
    }
});

from server side

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

Upvotes: 1

Related Questions