接收键值对作为输入参数

时间:2017-11-16 15:21:56

标签: c# json asp.net-web-api json-deserialization

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

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

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

{
"MouseSampleBarcode" : "MOS81"
}

如何解析它并将它们存储到Model类

 [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; }
    }
 }

3 个答案:

答案 0 :(得分:1)

你可以这样做。将您的班级更改为此定义。在您的控制器linqQuery.ToString() 中将包含您可以根据需要使用的json:

coreBarCode.json
  

更新

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

答案 1 :(得分:0)

正如@Lokki在评论中提到的那样。 GET动词没有正文,您需要将其更改为POST或PUT(取决于您是否正在创建/搜索或更新),因此您的代码将如下所示:

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

答案 2 :(得分:0)

所以,正如我所说:Get没有身体。
关注@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
   }
   ...
}