如何在C#中的自定义类中接收HttpPost中的数据?

时间:2019-05-09 01:02:17

标签: c# asp.net-web-api

我如何接收来自帖子(... / 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 个答案:

答案 0 :(得分:1)

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。如果您发现该操作正在以XML格式返回数据,则可以将“ accepts”标头设置为application / json

答案 1 :(得分:0)

您需要将类中的值声明为属性,例如:

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对象返回。