はじめに:私はMVC 4と.NET v4.6.1のアプリケーションを持っており、魅力的な働きをしています。一つのエディタテンプレートは、物事のリストを取得するには、コントローラにAJAX要求を送信します。JSONからASP.NET CoreへのPOSTの2つの配列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も同様の問題がありました。しかし、彼は1つだけのオブジェクトを送った、私は2つ持っています。そして提案の解決策は私にとってはうまくいかなかった。
この作品を制作するにはどうすればよいですか?
EDIT 私はまったく同じページに何か似ています。データは、剣道の構成要素によって提出されます。コンテンツタイプはapplication/x-www-form-urlencoded
で、ペイロードは、次のようになります。これは私がStartup.cs
に設定していますDefaultContractResolver
が原因である可能性があり
[HttpPost]
public JsonResult PrivilegeListForUser([DataSourceRequest]DataSourceRequest request, Guid[] selectedPrivileges, Guid[] selectedGroups)
{
// Stuff
}
:
profileId=8f96c1bb-5c68-4071-a423-ab2a7ba8234f&selectedPrivileges=1410335f-9e35-4454-a7e9-77c7d24bf5df&selectedGroups=60d0ec60-c820-47d7-acea-f4d57f221e5c
コントローラは非常によく、これら二つの配列を受信することが可能です?
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
services.AddKendo();
}
敬具、 カーステン
PS:私はTelerikの剣道を使用していますことに気づいたかもしれません。はい、両方のアプリケーションで異なるバージョンを使用しています。しかし、私は剣道がどのようにここに干渉すべきか、見ません。
をちょうどそれがネットコアと剣道UI MVCのwapperの問題ではありませんを確認するために、あなたは** DataSourceRequest **削除だろうか?そして、それらの2つの配列だけを投稿してください。 – Win
いいえここに運が... –