【问题标题】:Input JSON on web-api POST (C#)在 web-api POST (C#) 上输入 JSON
【发布时间】: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 开发的新手(实际上不知道我在做什么),

提前致谢,

塔雷克

【问题讨论】:

    标签: c# json api asp.net-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 中的两个数组更改为 FirstArraySecondArray):

      {
      "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();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 2015-05-06
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        相关资源
        最近更新 更多