【发布时间】:2016-07-28 12:52:15
【问题描述】:
前言:我有一个使用 MVC 4 和 .NET v4.6.1 的应用程序,并且工作起来非常棒。一个编辑器模板向控制器发送 AJAX 请求以获取事物列表:
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请求的payload如下:
{“特权”:[“d72c1162-0c3d-e611-953e-00155d9e5c08”,“e32c1162-0c3d-e611-953e-00155d9e5c08”],“特权组”:[“bb2c1162-0c3d-e611-950e-00155d9e” ]}
每当发送 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 的 Kendo。是的,我在两个应用程序中使用不同的版本。但我不明白,剑道应该如何干涉这里。
【问题讨论】:
-
只是为了确保它不是 .Net Core 的 Kendo UI MVC wapper 问题,您可以删除 DataSourceRequest 吗?然后只发布这两个数组。
标签: asp.net-core asp.net-core-mvc