在 web-api POST (C#) 上输入 JSON
Posted
技术标签:
【中文标题】在 web-api POST (C#) 上输入 JSON【英文标题】:Input JSON on web-api POST (C#) 【发布时间】:2021-04-11 05:05:37 【问题描述】:我目前将我的 Web API 绑定到我的计算机文件,如下所示:
namespace APIDissertação.Controllers
[Route("api/[controller]")]
[ApiController]
public class DissertacaoController : ControllerBase
[HttpPost]
public IActionResult Post(/*JObject InputRequest*/)
try
DissertacaoClass MeuProblema = new DissertacaoClass();
MeuProblema.ArquivoGrafo_InicializarProblema(@"C:\C#\ArquivoGrafo.txt");
MeuProblema.ArquivoNv0(@"C:\C#\ArquivoNv0.txt");
MeuProblema.LerArquivoDemandas(@"C:\C#\ArquivoDemandas.txt");
MeuProblema.GerarCaminhos_Arcos();
String result = MeuProblema.CriarResolverProblema();
return Ok(result);//ResultRequest);
catch (Exception ex)
return BadRequest();
我想要做的是将此文件替换为将输入到 API 的 JSON,JSON 如下所示:
"QuantidadeNosSemTempo": 4
"QuantidadeTempos": 12
"Grafo_Terminal;X;Y;Nv0": [
"0;0;0;1",
"1;2;2;1",
"2;3;1;1",
"3;0;3;1"
],
"Demanda;TerminalNoInicial;TempoNoInicial;TerminalNoFinal;TempoNoFinal;Tamanho" : [
"0;0;0;2;8;0,7",
"1;0;0;3;11;0,3",
"2;1;0;2;8;0,5",
"3;1;1;2;9;0,5",
"4;2;1;0;10;0,3",
"5;2;1;3;11;0,2"
]
我该怎么做? 我是 web api 开发的新手(实际上不知道我在做什么),
提前致谢,
塔雷克
【问题讨论】:
【参考方案1】:如果您希望所有结构都被接受,您可以使用动态类型。
但是,我更喜欢使用 https://app.quicktype.io/ 之类的工具生成类型,然后再使用该 DTO。
您的 json 结构也有一些缺少逗号的问题
"QuantidadeNosSemTempo": 4,
"QuantidadeTempos": 12,
"Grafo_Terminal;X;Y;Nv0": [
"0;0;0;1",
"1;2;2;1",
"2;3;1;1",
"3;0;3;1"
],
"Demanda;TerminalNoInicial;TempoNoInicial;TerminalNoFinal;TempoNoFinal;Tamanho" : [
"0;0;0;2;8;0,7",
"1;0;0;3;11;0,3",
"2;1;0;2;8;0,5",
"3;1;1;2;9;0,5",
"4;2;1;0;10;0,3",
"5;2;1;3;11;0,2"
]
之后,您只需发送一个内容类型为“application/json”的 http POST 请求,并且请求的主体包含该 url 的 json,您应该一切顺利。
【讨论】:
【参考方案2】:就像建议一样,也许你可以稍微改变一下你的 json,像这样(注意我把你的 json 中的两个数组更改为 FirstArray
和 SecondArray
):
"QuantidadeNosSemTempo": 4,
"QuantidadeTempos": 12,
"FirstArray": [
"Grafo_Terminal": 0,
"X": 0,
"Y": 0,
"Nv0": 1
,
"Grafo_Terminal": 1,
"X": 2,
"Y": 2,
"Nv0": 1
,
"Grafo_Terminal": 2,
"X": 3,
"Y": 1,
"Nv0": 1
,
"Grafo_Terminal": 3,
"X": 0,
"Y": 3,
"Nv0": 1
],
"SecondArray": [
"Demanda": 0,
"TerminalNoInicial": 0,
"TempoNoInicial": 0,
"TerminalNoFinal": 2,
"TempoNoFinal": 8,
"Tamanho": 0.7
,
"Demanda": 1,
"TerminalNoInicial": 0,
"TempoNoInicial": 0,
"TerminalNoFinal": 3,
"TempoNoFinal": 11,
"Tamanho": 0.3
,
"Demanda": 2,
"TerminalNoInicial": 1,
"TempoNoInicial": 0,
"TerminalNoFinal": 2,
"TempoNoFinal": 8,
"Tamanho": 0.5
,
"Demanda": 3,
"TerminalNoInicial": 1,
"TempoNoInicial": 1,
"TerminalNoFinal": 2,
"TempoNoFinal": 9,
"Tamanho": 0.5
,
"Demanda": 4,
"TerminalNoInicial": 2,
"TempoNoInicial": 1,
"TerminalNoFinal": 0,
"TempoNoFinal": 10,
"Tamanho": 0.3
,
"Demanda": 5,
"TerminalNoInicial": 2,
"TempoNoInicial": 1,
"TerminalNoFinal": 3,
"TempoNoFinal": 11,
"Tamanho": 0.2
]
作为输入请求的 C# 类可能是 DTO (InputRequest
):
public class FirstArray
public int Grafo_Terminal get; set;
public int X get; set;
public int Y get; set;
public int Nv0 get; set;
public class SecondArray
public int Demanda get; set;
public int TerminalNoInicial get; set;
public int TempoNoInicial get; set;
public int TerminalNoFinal get; set;
public int TempoNoFinal get; set;
public double Tamanho get; set;
public class InputRequest
public int QuantidadeNosSemTempo get; set;
public int QuantidadeTempos get; set;
public List<FirstArray> FirstArray get; set;
public List<SecondArray> SecondArray get; set;
因此,如果您实施此更改,您的 post 方法将是:
[HttpPost]
public IActionResult Post(InputRequest inputRequest)
try
DissertacaoClass MeuProblema = new DissertacaoClass();
String result = MeuProblema.CriarResolverProblema(inputRequest); //you will have to change the way you resolve the problem
return Ok(result); //ResultRequest
catch (Exception ex)
return BadRequest();
【讨论】:
以上是关于在 web-api POST (C#) 上输入 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 在 Windows 8 Metro App 上发送 POST 请求
参数中带有 IEnumerable 的 C# OData Web API POST 端点返回错误 400,输入无效
ASP.NET web api 无法获取 application/x-www-form-urlencoded HTTP POST