Как получить JSON через контекст ASP.Net.Request - PullRequest
16 голосов
/ 03 августа 2010
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"
 });

Я пытаюсь получить опубликованные данные JSON на стороне сервера в файле ASHX с помощью этого кода:

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

но оно всегда возвращает ноль. Что я делаю не так?

Ответы [ 5 ]

13 голосов
/ 03 августа 2010
  1. получить тело запроса от HttpContext.Current.Request.InputStream .
  2. прочитать входной поток и преобразовать в строку
  3. используйте javascriptserializer , чтобы десериализовать объект json в объект строго типа (убедитесь, что свойства json имеют то же имя, что и счетчик строго типа)
11 голосов
/ 05 августа 2010

копаем в интернете.Я обнаружил, что IE имеет проблемы с получением запроса POST в полном объеме.Предложение @ ronaldwidha на InputStream похоже на то, что я нашел.Но вместо использования javascriptserializer я использую фрагменты кода JSON.NET ниже, и я надеюсь, что это поможет другим с подобной проблемой

 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;
   }
}
10 голосов
/ 10 июля 2014

С 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));
0 голосов
/ 03 августа 2010

Я думаю, вы могли бы получить тело запроса из HttpCurrent.Context.Request.GetResponse ().

Вероятно, хорошей идеей будет сначала проверить заголовок типа содержимого.

0 голосов
/ 03 августа 2010

Запрос [] будет смотреть только на параметры формы и строку запроса. Вам нужно будет заполнить форму, использовать qs или самостоятельно проанализировать тело запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...