none
Как принять JSON-данные через метод POST? RRS feed

  • Вопрос

  • Здравствуйте!

    У меня есть POST-обработчик:

     public void  Post(string jsonString)
            {
                IList<MySMS> smsCollection = JsonConvert.DeserializeObject <IList <MySMS> > (jsonString);
                SMS_Repository.Add(smsCollection);
            }


    это модель:

        public class MySMS    {        public int Id { get; set; }        public string Name { get; set; }        public string FromNumber { get; set; }        public string ToNumber { get; set; }        public string Text { get; set; }

    Я пытался проверить - правильно ли работает обработчик и запись данных  в базу.

    Для этого послал запрос в Fiddler'е:

    http://localhost:ххххх/api/sms

    где

    Request Headers:

    Host: localhost:xxxxx
    Content-Type: application/json

    Request Body:

    [{"name":"namename", "tonumber":"000", "fromnumber":"000111", "text":"texttext"},{"name":"namename", "tonumber":"000", "fromnumber":"000111", "text":"texttext"}]

    В итоге появляется исключение в файле InspectActionSelector.cs:

    в строке 

    var selectedAction = _innerSelector.SelectAction(controllerContext);

    Processing of the HTTP request resulted in an exception. Please see the HTTP response returned by the 'Response' property of this exception for details.

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

    17 июня 2013 г. 9:56

Ответы

Все ответы

  • Посмотрите, что пишется в InnerException в отладчике.
    17 июня 2013 г. 11:17
    Модератор
  • Yatajga, в InnerException стоит NULL 
    17 июня 2013 г. 11:35
  • Скажите, а могут контроллеры самостоятельно распознавать приходящую JSON-строку и автоматически формировать объект. То есть, чтобы можно было во входящих параметрах сразу указывать экземпляр класса:

    public void Post(MyData data)

    а не 

    public void  Post(string jsonString)

    с последующей обработкой входящей строки?

    18 июня 2013 г. 5:39
  • Да, есть такая возможность. Посмотрите в сторону класса JsonValueProviderFactory.
    18 июня 2013 г. 6:05
    Модератор
  • Yatajga, Вы можете немного помочь?

    Я добавил в protected void Application_Start()

    ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

    И вот метод моего контроллера SMSController:

            public void Post(MySMS singleSMS)       

    {           

    MySMS smska = new MySMS();           

    smska.Name = singleSMS.Name;           

    smska.ToNumber = singleSMS.ToNumber;           

    smska.FromNumber = singleSMS.FromNumber;           

    smska.Text = singleSMS.Text;           

    try            {               

    SMS_Repository.Add(singleSMS);            }           

    catch (Exception)            {               

    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotImplemented));            }        }

    А это модель:

        [JsonObject]   

    public class MySMS   

    {        [JsonProperty("id")]       

    public int Id { get; set; }       

    [JsonProperty("name")]       

    public string Name { get; set; }       

    [JsonProperty("fromnumber")]       

    public string FromNumber { get; set; }       

    [JsonProperty("tonumber")]       

    public string ToNumber { get; set; }       

    [JsonProperty("text")]       

    public string Text { get; set; }    }


    Теперь я пытаюсь передать JSON:

    POST         http://localhost:25856/api/SMS

    Request Body:

    {"name":"namename", "tonumber":"000", "fromnumber":"000111", "text":"texttext"}

    И выходит ошибка здесь - smska.Name = singleSMS.Name;

    Ссылка на объект не указывает на экземпляр объекта.

    Очень нужна помощь!



    • Изменено ASalihov 18 июня 2013 г. 7:19
    18 июня 2013 г. 7:17
  • Иногда совсем забываю про некоторые топики...времени мало. Попробуйте убрать кавычки в посылаемой строке с имён свойств, скорее всего дело в этом.

    {name:"namename", tonumber:"000", fromnumber:"000111", text:"texttext"}


    Сделаем содержимое сообщества лучше, вместе!

    24 июня 2013 г. 19:41
    Модератор