2016-02-28 3 views
2

У меня есть приложение Web Api с простым контроллером. Получить методы работают нормально, но у меня проблема с отправкой и отправкой запросов.Не удается опубликовать данные в MVC 6 Приложение Web Api

[Route("api/[controller]")] 
[EnableCors("AllowAll")] 
public class LessonController : Controller { 
    ... 
    [HttpPut("{id}")] 
    public void Put(int id, [FromBody] Lesson lesson) { 
     ... 
    } 
    .... 
} 

где Lesson является

public class Lesson { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Text { get; set; } 
    public string Description { get; set; } 
    public bool IsModerated { get; set; } 
    public int? PrevLessonId { get; set; } 
    public int? NextLessonId { get; set; } 
} 

Так я пытаюсь отправить запрос и не везёт, урок является только объект по умолчанию инициализируется свойствами. Я послал запрос в два пути: первый с JS

$.ajax({ 
    type: "POST", 
    url: 'http://localhost:1822/api/lesson/1', 
    data: JSON.stringify({ 
     lesson: { 
     description: "Fourth lesson description", 
     isModerated: true, 
     name: "Fourth lesson", 
     nextLessonId: 5, 
     prevLessonId: 3, 
     text: "Fourth lesson text" 
    }}), 
    contentType: "application/json", 
    success: function (data) { 
     alert(data); 
    } 
}); 

и Почтальон: Postman screen

Так тип содержимого правильно. Может ли кто-нибудь сказать мне, с чем связана проблема?

UPD: Я пытался использовать PostLesson модель, которая содержит все свойства от Lesson но Id и послал запрос через Почтальон с данными UpperCamelCase в теле, но это не решает мою проблему.

+0

Ваш объект Lesson имеет идентификатор. Чтобы произошла привязка к модели, объекты должны точно совпадать; что также относится к капитализации свойств. –

+0

Нет, это не проблема для моей проблемы, я создал новый класс 'PostLesson' со всем полем из' Lesson', но 'Id', и это не решает мою проблему. – user3272018

+0

Новый класс, который вы создали, - это camelCase с именами свойств, имеющих первую строчную букву, такую ​​как содержимое тела, которое вы публикуете? –

ответ

1

Я решил свою проблему. На самом деле проблема довольно проста. Нам просто нужно передать объект в Post метод, который равен структуре модели Lesson без указания имени аргумента. Так что мой JS код нужно выглядит

$.ajax({ 
    type: "POST", 
    url: 'http://localhost:1822/api/lesson/1', 
    data: JSON.stringify({ 
     description: "Fourth lesson description", 
     isModerated: true, 
     name: "Fourth lesson", 
     nextLessonId: 5, 
     prevLessonId: 3, 
     text: "Fourth lesson text" 
    }), 
    contentType: "application/json", 
    success: function (data) { 
     alert(data); 
    } 
}); 

Для некоторых Добавление информации см this link.

Смежные вопросы