2017-09-08 150 views
2

我使用jQuery并使用POST方法发送数据。但在服务器方法中,值不会到来。什么可能是错误?ASP.NET Core 2,jQuery POST数据null

客户

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "./AddTag", 
    dataType: "json", 
    data: "{'parentId':42,'tagName':'isTagName'}", 
    success: function (response) { 
     // ... 
    } 
}); 

服务器

[HttpPost] 
public JObject AddTag(int parentId, string tagName) 
{ 
    dynamic answer = new JObject(); 
    List<LogRecord> logs = new List<LogRecord>(); 
    answer.added = fStorage.Tags.AddTag(parentId, tagName, logs); 
    return answer; 
} 

Brackpoint

Chrome

固定 非常感谢大家。我明白我的错误。我定了这个客户端和服务器代码:

let tag = { 
     "Id": 0, 
     "ParentId": 42, 
     "Name": isTagName 
    }; 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "./AddTag", 
    dataType: "json", 
    data: JSON.stringify(tag), 
    success: function (response) { 
     // ... 
    } 
}); 

服务器

[HttpPost] 
    public JObject AddTag([FromBody] Tag tag) 
    { 
     dynamic answer = new JObject(); 
     List<LogRecord> logs = new List<LogRecord>(); 

     answer.added = fStorage.Tags.AddTag(tag.ParentId, tag.Name, logs); 
     answer.logs = Json(logs); 

     return answer; 
    } 

类增加了

public class Tag 
{ 
    public int Id { get; set; } 
    public int ParentId { get; set; } 
    public string Name { get; set; } 
    public List<Tag> ChildsList { get; set; } 
    [NonSerialized] 
    public Tag ParrentTag; 
} 
+1

你发送JSON,而不是查询字符串,改变你的'data'是 “的parentId = 42&标签名= isTagName” 和'dataType'到'pplication/X WWW的形式 - urlencoded“并重试。 –

+0

本示例在ASP.NET MVC中正确工作。由服务器处理POST方法有什么区别? –

+0

“JSON”与两个“字符串”是不同的类型,所以值得一试。 –

回答

6

尝试提取您的PARAMS到一个单独的DTO类那样做:

public class ParentDTO 
{ 
public int parentId{get; set;} 
public string tagName{ get; set;} 
} 

[HttpPost] 
public JObject AddTag([FromBody] ParentDTO parent) 
{ 

} 
+0

我错过了添加[FromBody];愚蠢的错误,如果有人面临同样的问题,请检查相同。 –

-2

更改你的Ajax这个

$.ajax({ 
type: "POST", 
contentType: "application/json; charset=utf-8", 
url: "./AddTag?parentId="+42+"&tagName="+'isTagName', 
dataType: "json", 
success: function (response) { 
    // ... 
} 

});

+0

你的例子是GET方法,而不是POST。您将参数作为查询字符串的一部分发送。 –

3

使用[FromBody]帕拉姆之前。它是检查并获取身体属性值,否则它会检查Url Querystring。

例子:

[HttpPost] 
public JObject AddTag([FromBody] int parentid,[FromBody]string tagname) 
{ 

} 

[HttpPost] 
public JObject AddTag([FromBody] {ModelName} parent) 
{ 

}