gpt4 book ai didi

c# - 如何从 Azure API 管理中的请求正文获取原始日期时间值?

转载 作者:行者123 更新时间:2023-12-03 04:49:25 25 4
gpt4 key购买 nike

目前,我正在尝试访问 Azure API 管理中 JSON 属性的原始值。我有如下请求:

{
"date": "2019-12-09T12:00:00Z"
}

以及类似的操作:

    <inbound>
<base />
<!-- Assume datetime in format 2019-12-09T12:00:00Z -->
<set-variable name="time" value="@(context.Request.Body.As<JObject>()["date"])" />
<!-- Attempt to acquire raw value -->
<set-variable name="rawValue" value="@{
var value = JsonConvert.SerializeObject((JValue)context.Variables["date"]);
return value.ToString();
}" />
<!-- raw value is: \"2019-12-09T12:00:00Z\" -->
</inbound>

我在这里找到了类似的答案: JToken: Get raw/original JSON value所以我尝试序列化该对象。

但就我而言,Azure API 管理会输出带有附加引号的原始值,如下所示:

set-variable (0 ms)
{
"message": "Context variable was successfully set.",
"name": "rawValue",
"value": "\"2019-12-09T12:00:01Z\""
}

一个简单的方法是替换它们,但是没有更好的解决方案吗?

+++ 更新+++

刚刚找到这个解决方案:

Convert.ToDateTime(context.Request.Body.As<JObject>()["date"]).ToString("o")

输出:

set-variable (0 ms)
{
"message": "Expression was successfully evaluated.",
"expression": "Convert.ToDateTime(context.Request.Body.As<JObject>()[\"date\"]).ToString(\"o\")",
"value": "2019-12-10T09:10:00.0000000Z"
}

IMO,这仍然不是 100% 我所期望的,但至少它是正确的格式。我仍然愿意寻求更好的解决方案。

最佳答案

随着即将发布的 Azure API 管理版本的发布 here ,应该可以指定他自己的 JsonSerializerSettings 并可以像这样存储变量:

<set-variable name="body" value="@(context.Request.Body.AsJObject(preserveContent = true, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None } ))" /> 

一旦部署并能够测试它,我就会发布更新。

更新

结合使用新的 context.Request.Body.AsJObject() 方法和 JsonSerializer 设置,DateTime 值的输出现在将不再更改:

{
"source": "set-variable",
"timestamp": "2020-11-19T07:33:34.7901180Z",
"elapsed": "00:00:00.0018103",
"data": {
"message": "Context variable was successfully set.",
"name": "timestampFilter",
"value": "2019-12-09T12:00:00Z"
}
}

关于c# - 如何从 Azure API 管理中的请求正文获取原始日期时间值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59246051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com