前言:我有一个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
这里没有运气...... –