AspNetCore中的属性绑定

时间:2018-12-08 00:23:14

标签: c# dictionary asp.net-core

我正在使用:

return RedirectToAction("GetSchedule", new { requirements = preCheckParams.Requirements, weightValues = preCheckParams.WeightValues}); 
在我的aspnetcore应用中。接下来,我想在另一个操作中重复使用传递给匿名对象的值:

public IActionResult GetSchedule(List<string> requirements, Dictionary<string, int> weightValues)

奇怪的是,第一个值被绑定到GetSchedule操作中的List,而第二个对象(即字典)为空。在这种情况下,是否有关于词典的特殊规定?

1 个答案:

答案 0 :(得分:1)

您不能在RedirectToAction的routeValues参数中传递类。

RedirectToAction方法的返回值是HTTP 302(Status302Found),它会向指定操作生成GET请求。这意味着您所有的参数都将作为查询字符串放在URL中。

列表/字符串数组requirements可以在URL中传递,因为它绑定到查询字符串中的?requirements=value1&requirements=value2&..等,但是比绑定值更复杂的东西,只能是原始值。

我首先想到了几种选择:

  1. 将对象序列化为JSON并将其作为字符串传递。这将导致URL丑陋和混乱,但这是最不痛苦的方法。
  2. 如果您不需要严格的无状态机制,请使用temporary storage。在操作之前进行存储,并在输入字典时检索字典。
  3. 如果您可以从后端检索重量值,则可以传递一些标识符以进行查询。