2016-07-04 76 views
2

我在我的ASP.NET核心代碼以下型號:發佈複雜的JSON到ASP.NET核心控制器

public class TestItem 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public List<TestSubItem> SubItems { get; set; } 
} 

public class TestSubItem 
{ 
    public string Id { get; set; } 
} 

,並在我的控制器/ TestController.cs下面的方法:

// POST: Test/Create 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public IActionResult Create([FromBody]TestItem item) 
    { 
     // Use item here... 
     return View(item); 
    } 

我有以下的JavaScript在我的網頁:

var mySubItems = [{"Id": "1"}]; 

function submitForm() { 
    // myForm contains an Id textbox and a Name textbox 
    $("#myForm").submit(); 
}; 

function doPost() { 

    var testItem = { 
     Id: "2", 
     Name: "testName", 
     SubItems: mySubItems 
    }; 

    $.ajax({ 
     url: '@Url.Action("Create" ,"Test")', 
     type: "POST", 
     contentType: "application/json", 
     data: JSON.stringify(testItem), 
     success: function (data) { 
      alert(data); 
     }, 
     error: function (error) { 
      var x = error; //break here for debugging. 
     } 
    }); 
}; 

當我使用doPost,我總是g ^從服務器返回400 Bad Request。另一方面submitForm工作正常,但我不知道如何在發送到服務器的數據中包含mySubItems

什麼是最快的方法呢?

+0

'網址: '@ Url.Action( 「創建」, 「測試」)','。你確定這有效嗎? –

+0

是的,網址是好的 – marin

回答

5

在控制器上包含[ValidateAntiForgeryToken]會導致問題。發佈數據時需要包含令牌。 MVC自動將它包含在submitForm()工作的原因中。

挑戰是我不知道如何使它與JSON數據一起工作。您可能能夠通過添加以下到testItem:

__RequestVerificationToken: $('input[name="__RequestVerificationToken"]', form).val() 

欲瞭解更多信息,請include antiforgerytoken in ajax post ASP.NET MVC

相關問題