前言:我有一個MVC 4和.NET v4.6.1的應用程序,它像一個魅力一樣工作。一個編輯模板發送一個AJAX請求到控制器得到的事情的清單:將JSON中的兩個數組POST到MVC 6核心MVC 6
function showEffectiveRights(e) {
$.ajax({
contentType: "application/json",
data: JSON.stringify({
privileges: $("#AssignedPrivileges").getKendoMultiSelect().value(),
privilegeGroups: $("#AssignedGroups").getKendoMultiSelect().value()
}),
dataType: "json",
success: function (data) {
// Stuff
},
error: function (data) {
showResponseMessages(data);
},
type: "POST",
url: '@Url.Action("EffectiveRights", "User")'
});
}
控制器看起來是這樣的:
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult EffectiveRights([DataSourceRequest] DataSourceRequest request, Guid[] privileges, Guid[] privilegeGroups)
{
// Stuff
}
POST請求的有效載荷如下:
{"privileges":["d72c1162-0c3d-e611-953e-00155d9e5c08","e32c1162-0c3d-e611-953e-00155d9e5c08"],"privilegeGroups":["bb2c1162-0c3d-e611-953e-00155d9e5c08"]}
每當發送AJAX請求時,變量privileges
和privilegeGroups
都有來自客戶端的信息。好極了!
讓我們來解決這個問題。我的新應用程序應該使用MVC 6和.NET Core。根據NuGet,我使用的每個圖書館都是最新的。 JavaScript是完全一樣的。控制器只得到另一屬性(它不與AcceptVerbs
工作,要麼):
[HttpPost]
public JsonResult EffectiveRights([DataSourceRequest] DataSourceRequest request, Guid[] privileges, Guid[] privilegeGroups)
{
// Stuff
}
的有效載荷和這兩個申請的請求頭是相同的。但無論出於何種原因,變量privileges
和privilegeGroups
都不包含任何元素。
我試圖添加[FromBody]
但這也沒有幫助。
https://stackoverflow.com/a/38493849/4944034也有類似的問題。但他只發送一個對象,我有兩個。而建議的解決方案並不適合我。
爲了完成這項工作我需要做些什麼改變?
編輯 我在同一頁上有類似的東西。數據由Kendo的一個組件提交。內容類型是application/x-www-form-urlencoded
和有效載荷看起來是這樣的:
profileId=8f96c1bb-5c68-4071-a423-ab2a7ba8234f&selectedPrivileges=1410335f-9e35-4454-a7e9-77c7d24bf5df&selectedGroups=60d0ec60-c820-47d7-acea-f4d57f221e5c
控制器是很好的能夠接收這兩個數組:
[HttpPost]
public JsonResult PrivilegeListForUser([DataSourceRequest]DataSourceRequest request, Guid[] selectedPrivileges, Guid[] selectedGroups)
{
// Stuff
}
可能這是由於DefaultContractResolver
我Startup.cs
正在設置?
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
services.AddKendo();
}
最好的問候, 卡斯滕
PS:你可能已經注意到,我使用Telerik的劍道。是的,我在這兩個應用程序中使用不同的版本。但我不明白,劍道在這裏應該如何幹預。
只是爲了確保它不是劍道UI MVC wapper問題與.net核心,你可以刪除** ** DataSourceRequest?然後只發布這兩個數組。 – Win
這裏沒有運氣...... –