Cómo recuperar JSON a través del contexto ASP.Net.

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

Estoy intentando recuperar datos JSON publicados en el lado del servidor en un archivo ASHX a través de este código:

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

Pero siempre vuelve nulo. ¿Qué estoy haciendo mal?

  1. obtener el cuerpo de la solicitud de HttpContext.Current.Request.InputStream .
  2. leer el flujo de entrada y convertir a cadena
  3. use javascriptserializer para deserializar el objeto json a un objeto de tipo fuerte (asegúrese de que las propiedades de json compartan el mismo nombre que la parte del contador de tipo fuerte)

Cavando el internet. Descubrí que IE tiene problemas para recibir la solicitud POST en su totalidad. La sugerencia de @ ronaldwidha en InputStream es similar a lo que he encontrado. Pero en lugar de usar javascriptserializer, uso JSON.NET. Los fragmentos de código se encuentran a continuación y espero que esto ayude a otros con problemas similares.

  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("
" + fields[0] + "
"); //context.Response.Write("
" + fields[1] + "
"); } string jsonRecord = s; } }

De http://dailydotnettips.com/2013/09/26/sending-raw-json-request-to-asp-net-from-jquery/

 var jsonString = String.Empty; context.Request.InputStream.Position = 0; using (var inputStream = new StreamReader(context.Request.InputStream)) { jsonString = inputStream.ReadToEnd(); } JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); object serJsonDetails = javaScriptSerializer.Deserialize(jsonString, typeof(object)); 

Solicitud [] solo mirará los parámetros de formulario y quetystring. Necesitará hacer un envío de formulario o usar qs o analizar el cuerpo de la solicitud usted mismo.

Creo que podría obtener el cuerpo de solicitud de HttpCurrent.Context.Request.GetResponse ().

Probablemente sea una buena idea verificar primero el encabezado de tipo de contenido.