2010-08-03 4 views
14
var OrderInfo = {"ProductID": 
    "ProductIDValue", 
    "ProductName": "ProductName", 
    "Quantity": 1, 
    "Amount": 9999, 
    "SLQuantity": 9999, 
    "SLDate": "08/03/2010" 
}; 

var DTO = { 'OrderInfo': OrderInfo }; 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "JasonHandler.ashx", 
    data: JSON.stringify(DTO), 
    dataType: "json" 
}); 

Je suis en train de récupérer les données affichées sur JSON côté serveur dans un fichier ASHX via ce code:Comment récupérer JSON via ASP.Net context.Request

string strrequest = context.Request["OrderInfo"]; 

mais il retourne toujours NULL. Qu'est-ce que je fais mal?

+1

je aurais tendance à afficher une méthode Web sur un fichier .asmx et tirez le paramètre de l'objet webmethod, plutôt que d'utiliser un ashx. –

Répondre

-1

Request [] ne s'intéressera qu'aux paramètres form et quetystring. Vous devrez faire un post de formulaire ou utiliser qs ou analyser le corps de la requête vous-même.

-2

Je pense que vous pourriez obtenir le corps de la demande hors de HttpCurrent.Context.Request.GetResponse().

C'est probablement une bonne idée de vérifier l'en-tête du type de contenu en premier.

11

Creuser la L'Internet. J'ai découvert que IE a un problème de réception de la requête POST dans son intégralité. La suggestion de @Ronaldwidha sur InputStream est similaire à ce que j'ai trouvé. Mais plutôt que d'utiliser JavaScriptSerializer j'utilise des extraits de code JSON.NET est ci-dessous et j'espère que cela aiderait les autres avec le même problème

public class JasonHandler : IHttpHandler { 

public void ProcessRequest (HttpContext context) { 

    context.Response.ContentType = "application/json"; 
    context.Response.ContentEncoding = Encoding.UTF8; 

    System.IO.Stream body = context.Request.InputStream; 
    System.Text.Encoding encoding = context.Request.ContentEncoding; 
    System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); 
    if (context.Request.ContentType != null) 
    { 
     context.Response.Write("Client data content type " + context.Request.ContentType); 
    } 
    string s = reader.ReadToEnd(); 
    string[] content = s.Split('&'); 
    for (int i = 0; i < content.Length; i++) 
    { 
     string[] fields = content[i].Split('='); 
     //context.Response.Write("<div><strong>" + fields[0] + "</strong></div>"); 
     //context.Response.Write("<div>" + fields[1] + "</div> "); 
    } 

    string jsonRecord = s; 
    } 
} 
+0

Je ne sais pas si vous suggérez que la suggestion de @ ronaldwidha n'est pas compatible IE? Est-ce la raison pour laquelle vous utilisez JSON.NET? Ou est-ce juste une préférence? – JDandChips