接收键值对作为输入参数
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"
}
我正在尝试接收以下键值对作为我的 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"
}