Как получить данные в моем HttpPost в C # как пользовательский класс? - PullRequest
0 голосов
/ 09 мая 2019

Как получить данные, поступающие из поста (... / api / search), в качестве пользовательского объекта c #?

Получаю ли я в виде строки JSON, десериализую ее, а затем преобразую в мой объект?Как мне это сделать?

Или я сразу получу его как SearchObject?Как бы я это сделал?

Сейчас мой запрос POST возвращает пустой объект "{}".

namespace Safety.Api
        {
            [RoutePrefix("api")]
            public class SearchController : ApiController
            {
                [Route("search")]
                [HttpPost]
                public string TestSearch([FromBody] SearchObject mystring)
                {
                    return JsonConvert.SerializeObject(mystring);
                }

            }
        }

Это мой пользовательский класс:

public class SearchObject
{
    string distributionType,
        distributionTemplate,
        productLine,
        studyOfOccurrence,
        countryOfOccurrence;

}

Ответы [ 2 ]

1 голос
/ 09 мая 2019

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

Так что, если ваше действие выглядит следующим образом

[Route("search")]
[HttpPost]
public SearchObject TestSearch([FromBody] SearchObject yourSearchObject)
{
    return yourSearchObject;
}

И вы выполняете запрос на выборку JavaScript следующим образом

fetch('/api/search', {
    method: 'POST',
    data: JSON.stringify({
        distributionType: 'some type',
        distributionTemplate: 'a template',
        productLine: 'the product line',
        studyOfOccurence: 'the study',
        countyOfOccurence: 'a country'
    }),
    headers: {
        'content-type': 'application/json'
    }
})
.then(res => res.json())
.then(data => console.log(data))

Оператор console.log(data) должен вывести

{
    distributionType: 'some type',
    distributionTemplate: 'a template',
    productLine: 'the product line',
    studyOfOccurence: 'the study',
    countyOfOccurence: 'a country'
}

В прошлом у меня были проблемы, когда WebApi будет пытаться вернуть XML вместо JSON или попытаться проанализировать данные из запроса как XML вместо JSON.Установив заголовок типа контента на application / json, вы говорите WebApi проанализировать данные как JSON.Вы также можете установить заголовок 'accept' для application / json, если обнаружите, что действие возвращает данные в виде XML

0 голосов
/ 09 мая 2019

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

public class SearchObject
{
    public string DistributionType { get; set; }
    public string DistributionTemplate { get; set; }
    public string ProductLine { get; set; }
    public string StudyOfOccurrence { get; set; }
    public string CountryOfOccurrence { get; set; }
}

Промежуточное программное обеспечение в ASP.NET автоматически преобразует объект в теле в ваш класс (если это возможно). Для этого он ищет метод set для каждого члена класса. Поскольку в вашем классе были только переменные, промежуточное ПО не смогло найти подходящее свойство и, как вы видели, не заполнило объект.

Теперь метод должен возвращать правильные значения в виде сериализованного объекта JSON.

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