2017-09-08 149 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) 
{ 

}