在Orchard工作流内的WebRequest Activity中纠正正文请求的JSON字符串格式?

时间:2017-07-05 22:44:33

标签: post orchardcms orchardcms-1.10

我正在尝试在WebRequest Activity中进行POST,但如果我选择JSON格式,则正文总是空的:

enter image description here

我尝试过转义和转义字符,包括和不包含引号和空格等:

{\"value\": [{\"@search.action\": \"delete\",\"id\": \"abc-008\"}]}

{value:[{@search.action: delete,id: abc-008}]}

formValues始终为空:

var formValues = activityContext.GetState<string>("FormValues") ?? "";

如果我选择Key / Value作为格式但是我需要Json,请求正常。

编辑:应该添加我尝试了有效的Json格式(JsonLint)以及我给出的示例,有空格和使用'而不是'但它仍然是空的。

2 个答案:

答案 0 :(得分:1)

快速修复:

(( "value": [(( "@search.action": "delete", "id": "abc - 008" ))] ))

说明:这实际上是Orchard如何在工作流程中处理令牌的尴尬副作用。拿一小撮盐,因为我的记忆力不好,但我认为它是这样的。因此,在将数据发送到各个工作流活动之前,工作流模块将执行存储的令牌。这意味着所有存储的JSON都会被丢弃,因为Orchard认为它是一个令牌(Orchard令牌的格式为:{Content.Body}等)并尝试执行它。我在尝试将复杂对象存储在工作流活动中时发现了这一点,并且不得不解决这个问题。我的意思是把它报告为一个问题,但我想我忘了(我的坏),但看到这个让我觉得它真的是一个错误。那么为什么上面的工作呢?一些自私的天才显然遇到了这个问题并用这个黑客行更新了代码:

var json = formValues.Replace("((", "{").Replace("))", "}");

然后离开用户界面说:

  

对于JSon,输入有效的JSon字符串

大规模失败。

为了纠正我之前的懒惰,我已经为此创建了两个问题。 https://github.com/OrchardCMS/Orchard/issues/7760 https://github.com/OrchardCMS/Orchard/issues/7759

答案 1 :(得分:0)

两种给定的Json格式都无效。你尝试过简单的格式吗?

  

{&#34; value&#34;:[{&#34; @ search.action&#34;:&#34; delete&#34;,&#34; id&#34;:&#34; abc - 008&#34; }]}