Asp.Net ApiController - почтовый объект содержит только нули - PullRequest
0 голосов
/ 01 ноября 2019

В моем контроллере API у меня есть следующий код

    public class RunReportController : System.Web.Http.ApiController
    {
        [HttpPost]
        public IHttpActionResult Post([FromUri]string reportname, [FromBody]IsoDate date)
        {
            // the code here is running but the IsoDate is never set correctly
            // reportname is working ok and set to correct values
        }
    }

Дата Iso объявлена ​​следующим образом:

public class IsoDate
{
    int Year { get; set; }
    int Month { get; set; }
    int Day { get; set; }

    public IsoDate()
    {
    }
}

И вот как я называю это со страницы:

$.ajax({
    type: "POST",
    url: "/api/admin/report/some-report",
    data: JSON.stringify({Year:2019,Month:1,Day:1}),
    contentType : 'application/json'
}).success(()=>{console.log("ok")}).fail(()=>{console.log("bad")});

И вот как объявляется маршрут:

config.Routes.MapHttpRoute(name: "RunReport", routeTemplate: "api/Admin/Report/{reportname}", defaults: new { controller = "RunReport" });

Каким-то образом IsoDate никогда не присваивается никаких значений и всегда хранит 3 нуля. Я знаю, что мог бы поместить дату в URI, но мне понадобятся другие отчеты, которые будут принимать более сложные данные (конечно, с использованием другого маршрута). Мне нужны мои контроллеры, чтобы принимать объекты из тела.

Еще один вывод: если я заменил тип параметра date на Dictionary<string,int>, он сразу начнет работать.

1 Ответ

1 голос
/ 01 ноября 2019

Вам нужно сделать свойства вашего класса общедоступными:

public class IsoDate
{
    public int Year { get; set; }
    public int Month { get; set; }
    public int Day { get; set; }

}
...