接收键值对作为输入参数

Receiving the key value pair as input parameter

我正在尝试接收以下键值对作为我的 Web 的输入参数 API

json=%7B%0A%22MouseSampleBarcode%22%20%3A%20%22MOS81%22%0A%7D%0A

其中字符串的右侧是 URL 编码的 JSON,看起来像

{
"MouseSampleBarcode" : "MOS81"
}

我如何解析它并将它们存储到模型中 class

 [HttpPost]
 public async Task<IHttpActionResult> Get([FromBody] CoreBarCodeDTO.RootObject coreBarCode)
 {
  string Bar_Code = coreBarCode.MouseSampleBarcode.ToString();

CoreBarCodeDTO 如下所示

public class CoreBarCodeDTO
{
    public class RootObject
    {
        public string MouseSampleBarcode { get; set; }
    }
 }

正如@Lokki 在他的评论中提到的那样。 GET 动词没有主体,您需要将其更改为 POST 或 PUT(取决于您是 creating/searching 还是正在更新),因此您的代码将如下所示:

[HttpPost("/")]
public async Task<IHttpActionResult> Get([FromBody] CoreBarCodeDTO.RootObject coreBarCode)
{ 
   string Bar_Code = coreBarCode.MouseSampleBarcode.ToString();

所以,正如我所说:Get 没有 body。
按照@KinSlayerUY 的回答。

[HttpPost("/")]
public async Task<IHttpActionResult> Post([FromBody] CoreBarCodeDTO.RootObject coreBarCode)
{ 
   string Bar_Code = coreBarCode.MouseSampleBarcode.ToString();
   ...
}


如果您需要使用 GET 删除 [FromBody] 属性并将数据作为单个参数发送

[HttpGet("/")]
public async Task<IHttpActionResult> Get(string mouseSampleBarcode)
{ 
   var rootObject = new CoreBarCodeDTO.RootObject
   {
        MouseSampleBarcode = mouseSampleBarcode
   }
   ...
}

你可以这样做。将您的 class 更改为此定义。在你的控制器中 coreBarCode.json 将有 json 然后你可以根据需要使用它:

public class CoreBarCodeDTO
{
    private string _json;
    public string json { get { return _json; }
        set {
            string decoded = HttpUtility.UrlDecode(value);
            _json = decoded;
        }
    }
}

Update

 [HttpPost]
 public async Task<IHttpActionResult> Get([FromBody] CoreBarCodeDTOcoreBarCode coreBarCode)
 {
    string Bar_Code = coreBarCode.json;
    //work with the JSON here, with Newtonsoft for example
    var obj = JObject.Parse(Bar_Code);
    // obj["MouseSampleBarcode"] now = "MOS81"

 }