我如何接收来自帖子(... / 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;
}
答案 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对象返回。