2016-02-28 34 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模型,包含从LessonId所有属性和身体与UpperCamelCase数据通过邮递员发送的请求,但它并没有解决我的问题。

+0

您的课程对象有一个ID。为了实现模型绑定,对象需要完全匹配;这也适用于房产的资本化。 –

+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

相关问题