Web API不会在POST上读取我的类型

问题描述 投票:1回答:1

我正在尝试通过POST将一些数据发送到我的Web API,但我的数据总是被读为null。

我发送它作为表单数据

Content-Type: application/x-www-form-urlencoded

它正在我的另一个项目中工作,但不是在这里,这很奇怪。

我的类型是这样的:

public class QueryResult
{
    public List<string> Headers;
    public List<QueryResultLine> Results;
}

我的要求是这样的:

[Route("export/excel")]
public HttpResponseMessage PostExportToExcel(QueryResult queryResult)
{
    DoSomething(queryResult);
}

每当我发出此请求时,queryResult.Headers和queryResult.Results为null。

集管=%5B%22Nummer%22%2C%22Omschrijving%22%2C%22Locatie%22%2C%22Beheerder%22%2C%22Niveau%22%2C%22ArtikelNummer%22%2C%22Naam%22%2C%22InhoudL%22 %2C%22InhoudKG%22%2C%22Voorkomen%22%2C%22Opslag%22%2C%22Seveso%22%2C%22CLP%22%2C%22Uitvoering%22%2C%22Voorziening%22%2C%22HPZinnen%22%5D与结果=%5B%7B%22Nummer%22%3A%22DECO.1%22%2C%22Omschrijving%22%3A%22Testvat%22%2C%22Locatie%22%3A%22Testvat +化学%22%2C%22Beheerder%22% 3A%22SIDCCEO%22%2C%22Niveau%22%3A0%2C%22ArtikelNummer%22%3A%22AM00632548%22%2C%22Naam%22%3A%22Tetrahydrothiophene ++ ++ Scentinel T +气体+加臭剂%22%2C% 22InhoudL%22%3A150%2C%22InhoudKG%22%3A150%2C%22Voorkomen%22%3A%22verplaatsbaar + recipi%C3%ABNT%22%2C%22Opslag%22%3Afalse%2C%22Seveso%22%3A%22P5c% 22%2C%22CLP%22%3Anull%2C%22Uitvoering%22%3A%22%22%2C%22Voorziening%22%3A%22%22%2C%22HPZinnen%22%3A%22H312%2C + H315%2C + H332%2C + P280%2C + P501%2C + H302%2C + H225%2C + H319%2C + H412%2C + P210%2C + P233%2C + P240%2C + P241%2C + P242%2C + P243% 2C + P264%2C + P270%2C + P301%2B310%2C + P303%2B361%2B353%2C + P330%2C + P331%2C + P370%2B 378%2C + P403%2B235%2C + P405%22%2C 22%24%%%24hashKey 22%3A%22object%3A210%22%7D%5D

post asp.net-web-api urlencode
1个回答
2
投票

每当我发出此请求时,queryResult.Headers和queryResult.Results为null

HeadersResults在模型绑定期间未绑定,因为它们被声明为字段,而不是属性。默认模型绑定器仅绑定属性。查看this article了解更多详情。

因此,您应该将QueryResult的定义调整为:

public class QueryResult
{
    public List<string> Headers { get; set; }

    public List<QueryResultLine> Results { get; set; }
}

对于您提供的查询正文,Headers属性将被反序列化为一个包含一个字符串的列表

[“数字”,“描述”,“位置”,“管理员”,“级别”,“商品编号”,“名称”,“ContentL”,“ContentKG”,“外观”,“存储”,“Seveso”,“ CLP“,”Version“,”Provision“,”HP Phrases“]

我相信这不是您所期望的,您需要将所有这些值添加为列表中的单独字符串。要实现此目的,您应该修复从客户端发送的请求。以下请求正文将被正确反序列化为值列表:

标题=数字和标题=描述和标题=位置和标题=经理和标题=级别和标题=文章编号和标题=姓名和标题=内容L&标题=内容KG和标题=预防和标题=存储和标题= Seveso和标题= CLP和标题=版本和标题=提供和标题= HP短语

如您所见,为了构建列表,Headers只是重复使用不同的值。 Results的申请部分应以同样的方式进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.