Значение Json не присваивается списку [HttpPost]

2

Поскольку я новичок в веб-api, мне трудно найти Json List для веб-API.

Json
[  
   {  
      "ItemId":20,
      "RegId":"VISIT0001778",
      "BLoadDetailId":"8/31/2018 12:28:10 PM",
      "OrderReferenceNo":null,
      "StartTime":"0001-01-01T00:00:00",
      "InvalidItemMsg":"",
      "InvalidItemstatus":false,
      "BLoadingBay":"Chute 009",
      "BLoadingBayCode":null,
      "BLoadingBayID":7,
      "RFID":7123,
      "GangId":2,
      "BOrderTransfer":false,
      "BLoadedBags":0.0,
      "BRemainingBags":0.0,
      "BConversionValue":null,
      "WHid":2
   }
]

учебный класс:

 public class clsStartTimeUpdate
 {
     public int ItemId { get; set; }
     public string RegId { get; set; }
     public string BLoadDetailId { get; set; }
     public string OrderReferenceNo{ get; set; }
     public DateTime StartTime { get; set; }
     public string InvalidItemMsg { get; set; }
     public bool InvalidItemstatus { get; set; }
     public string BLoadingBay { get; set; }
     public string BLoadingBayCode { get; set; }
     public int? BLoadingBayID { get; set; }
     public long? RFID { get; set; }
     public int? GangId { get; set; }
     public bool BOrderTransfer { get; set; }
     public decimal BLoadedBags { get; set; }
     public decimal BRemainingBags { get; set; }
     public string BConversionValue { get; set; }
     public int? WHid { get; set; }
 }

Запрос Json

http://localhost:49290/api/config/Post?StartTimeDetails=[enter image description here][1][{%22ItemId%22:20,%22RegId%22:%22VISIT0001778%22,%22BLoadDetailId%22:%228/31/2018%2012:28:10%20PM%22,%22OrderReferenceNo%22:null,%22StartTime%22:%222001-01-01T00:00:00%22,%22InvalidItemMsg%22:%22%22,%22InvalidItemstatus%22:false,%22BLoadingBay%22:%22Chute%20009%22,%22BLoadingBayCode%22:null,%22BLoadingBayID%22:7,%22RFID%22:7123,%22GangId%22:2,%22BOrderTransfer%22:false,%22BLoadedBags%22:0.0,%22BRemainingBags%22:0.0,%22BConversionValue%22:null,%22WHid%22:2}]

Метод WebAPI

[HttpPost]
public HttpResponseMessage Post([FromUri]List<clsStartTimeUpdate> StartTimeDetails)
{          
    return base.BuildSuccessResult(HttpStatusCode.OK, StartTimeDetails);
}

результат:

[{"ItemId":0,"RegId":null,"BLoadDetailId":null,"OrderReferenceNo":null,"StartTime":"0001-01-01T00:00:00","InvalidItemMsg":null,"InvalidItemstatus":false,"BLoadingBay":null,"BLoadingBayCode":null,"BLoadingBayID":null,"RFID":null,"GangId":null,"BOrderTransfer":false,"BLoadedBags":0.0,"BRemainingBags":0.0,"BConversionValue":null,"WHid":null}]

return result не присваивает значения, как в Json. Может быть, это простая ситуация, но я очень ценю помощь.

  • 0
    Проблема с параметром в методе или возвращаемым значением из него? Вы отладчик кода, чтобы увидеть, если StartTimeDetails выглядит правильно для начала?
  • 1
    Вы уверены, что можете вставить JSON в URL, как это? Не лучше ли поместить содержимое json в тело запроса?
Показать ещё 22 комментария
Теги:
asp.net-web-api

3 ответа

3
Лучший ответ

Кажется, что вы хотите передать свой json с запросом HttpGet вместо HttpPost после чего вы можете следовать ниже,

1) Отправить Json с HttpGet

Метод: Get

URL: http://localhost:49290/api/config/MyGet?StartTimeDetails=[{%22ItemId%22:20,%22RegId%22:%22VISIT0001778%22,%22BLoadDetailId%22:%228/31/2018%2012:28:10%20PM%22,%22OrderReferenceNo%22:null,%22StartTime%22:%220001-01-01T00:00:00%22,%22InvalidItemMsg%22:%22%22,%22InvalidItemstatus%22:false,%22BLoadingBay%22:%22Chute%20009%22,%22BLoadingBayCode%22:null,%22BLoadingBayID%22:7,%22RFID%22:7123,%22GangId%22:2,%22BOrderTransfer%22:false,%22BLoadedBags%22:0.0,%22BRemainingBags%22:0.0,%22BConversionValue%22:null,%22WHid%22:2}]

Метод Web Api:

[HttpGet]
public HttpResponseMessage MyGet(string StartTimeDetails)
{
    List<clsStartTimeUpdate> clsStartTimeUpdates = JsonConvert.DeserializeObject<List<clsStartTimeUpdate>>(StartTimeDetails);
    return base.BuildSuccessResult(HttpStatusCode.OK, StartTimeDetails);
}

Примечание. Плохая практика отправки огромного json в строку запроса, поэтому вместо использования HttpPost

2) Отправить Json с HttpPost

Метод: Post

URL: http://localhost:49290/api/config/MyPost

Данные:

[  
   {  
      "ItemId":20,
      "RegId":"VISIT0001778",
      "BLoadDetailId":"8/31/2018 12:28:10 PM",
      "OrderReferenceNo":null,
      "StartTime":"0001-01-01T00:00:00",
      "InvalidItemMsg":"",
      "InvalidItemstatus":false,
      "BLoadingBay":"Chute 009",
      "BLoadingBayCode":null,
      "BLoadingBayID":7,
      "RFID":7123,
      "GangId":2,
      "BOrderTransfer":false,
      "BLoadedBags":0.0,
      "BRemainingBags":0.0,
      "BConversionValue":null,
      "WHid":2
   }
]

Метод Web Api:

[HttpPost]
public HttpResponseMessage MyPost([FromBody]List<clsStartTimeUpdate> StartTimeDetails)
{
    return base.BuildSuccessResult(HttpStatusCode.OK, StartTimeDetails);
}
  • 1
    @Udk, просмотрите ответ, возможно, он вам поможет, и если затем примите ответ и проголосуйте, нажав стрелку вверх, чтобы ответить :)
  • 0
    это было прекрасно и именно то, что я хотел .. еще раз спасибо ..
Показать ещё 3 комментария
3

Для сложных типов Всегда используйте [FromBody] в аргументе.

[HttpPost]
public HttpResponseMessage Post([FromBody]List<clsStartTimeUpdate> StartTimeDetails)
{          
    return base.BuildSuccessResult(HttpStatusCode.OK, StartTimeDetails);

}

А затем укажите свой объект запроса в Body.

Примечание. Чтобы указать значение в теле, вам понадобится клиент API, такой как Postman или Swagger. https://www.getpostman.com/

В Postman,

Выберите метод "Почта" и укажите URL-адрес. Затем перейдите на вкладку "Тело" и выберите "Сырой". Укажите JSON как тип. В теле вставьте свои данные.

   { [
     {
        "ItemId":20,
        ..........
     }
    ]}

Изображение 174551

Другой ответ by @ershoaib - это реальное решение проблемы, с которой сталкивается OP. Тем не менее, я оставляю этот ответ, поскольку это стандарт, которому следует следовать.

  • 0
    Я использовал [FromBody], но список назначил общедоступную запись HttpResponseMessage (список [FromBody] <clsStartTimeUpdate> StartTimeDetails) для нуля и как указать объект запроса в теле. Можете ли вы привести пример?
  • 0
    Используете ли вы чванство или почтальон в качестве клиента для запроса, или для чего предназначен ваш клиент
Показать ещё 9 комментариев
0

Поскольку вы используете сообщение, вы должны ожидать, что данные в методе контроллера будут получены из тела. См. Соответствующую проблему здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню