Преобразовать данные формы [FromBody] application / x-www-form-urlencoded в Object в ASP.NET WebAPI - PullRequest
0 голосов
/ 30 августа 2018

Я публикую объект из пользовательского интерфейса Angular 6, я могу получить данные RAW в теле формы в виде строки. Данные дошли до метода контроллера тоже. Но я не смог привести его к объекту

Угловой 6 - календарь.Service.ts

saveSchedules():  Observable<any> {
 const sch: CalenderSchedulesModel = {ScheduleDate: 'today', description: 'all is well'};
    const formData = new FormData();
    formData.append('CalenderSchedulesModel', JSON.stringify(sch));
    const postOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/x-www-form-urlencoded'
      }),
      withCredentials: true,
    };

   return this.http.post('http://mydevserver.com/api/schedules',
   formData,
   postOptions)
  .pipe(catchError(this.handleError.bind(this)))
  .pipe(map(data =>console.log(JSON.stringify(data))));

}

ASP.NET WebAPI - CalenderController.cs

[HttpPost]
public async System.Threading.Tasks.Task<String> schedules(CalenderSchedulesModel CalenderSchedulesModel)
{
    try { 
        string content = "";            
        if (ModelState.IsValid && CalenderSchedulesModel != null)
        {
            //  This if block is passed     
            Logger.Info("CalenderSchedulesModel.ScheduleDate); //prints null
            Logger.Info(HttpUtility.HtmlEncode(CalenderSchedulesModel.ScheduleDate)); //prints null                 
            using (var contentStream = await this.Request.Content.ReadAsStreamAsync())
            {
                contentStream.Seek(0, SeekOrigin.Begin);
                using (var sr = new StreamReader(contentStream))
                {
                    content = sr.ReadToEnd();                        
                    Logger.Info(content); // prints ------WebKitFormBoundaryomeguzqYBNNqAAyg information with {"ScheduleDate":"today","description":"all is well"}
                }
            }
        }   
    }
    catch (Exception e)
    {
        Logger.Error(e.Message);
        Logger.Error(e.ToString);
        Logger.Error(e.StackTrace);
    }
    return "Recieved 200 ok";
}

после того, как вызванный API ответ получен как "Получено 200 нормально". Но все, что мне нужно, - это анализ данных формы для моего объекта CalenderSchedulesModel.

Найдите заголовок запроса для этого вызова API.

enter image description here

РЕДАКТИРОВАТЬ: изменен на HttpParams вместо отправки данных формы

const sch: CalenderSchedulesModel = {ScheduleDate: 'today', description: 'all is well'};
    const body = new HttpParams().set('CalenderSchedulesModel', JSON.stringify(sch));

Теперь я получаю объект, но все еще не могу разобрать объект C #

enter image description here

...