json - HttpRequestData 将正文包装在 { "json" : "" }
问题描述
我正在尝试设置一个 .NET 5 Azure Http 函数,该函数接受一个带有 json 正文的请求并将其输出到日志中。
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Pipeline;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
namespace MyProject.Test
{
public sealed class Function
{
[FunctionName("Test")]
public async Task RunAsync(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
HttpRequestData requestData,
FunctionExecutionContext executionContext)
{
executionContext.Logger.LogInformation(requestData.Body);
}
}
}
我发布了一个 json 正文以使用 Postman
{
"myProperty": "abc123"
}
哪个输出
{ "json": "{\"myProperty\":\"abc123\"}" }
我不确定为什么该函数将主体包裹在{ "json": "" }
.
我是否错误地设置了该功能?或者它是否设置正确并且我可以通过另一种方式访问原始身体?
解决方案
原来我遵循了一个过时的指南来设置 .NET 5 Http Functions。微软官方指南有效。https://docs.microsoft.com/en-gb/azure/azure-functions/dotnet-isolated-process-guide
这需要将其中一些包添加到.csproj
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.0.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.12" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.0.1" OutputItemType="Analyzer" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0" />
<PackageReference Include="System.Net.NameResolution" Version="4.3.0" />
<PackageReference Include="System.Text.Json" Version="5.0.1" />
</ItemGroup>
现在函数看起来像这样
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
namespace MyProject.Test
{
public sealed class Function
{
[Function("Test")]
public async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
HttpRequestData requestData,
FunctionContext context)
{
var myclass = await System.Text.Json.JsonSerializer.DeserializeAsync<MyClass>(requestData.Body);
context.GetLogger("Test").LogInformation(myclass.MyProperty);
var response = requestData.CreateResponse(System.Net.HttpStatusCode.OK);
return response;
}
public class MyClass
{
[JsonPropertyName("myProperty")]
public string MyProperty { get; set; }
}
}
}
json 正文现在可以正确序列化。
推荐阅读
- laravel - Laravel 对 JavaScript 变量的本地化
- c# - 如何以二进制格式获取字节的信息
- regex - HTML 5 模式允许数值最多 4 个字符加上破折号加上数字字符最多 11 个字符?
- java - JavaFXGL如何从maven获取java库
- ios - 从 ionic 本机 http 客户端发布数据时更改对象属性的顺序
- javascript - 用 for 循环填充 RichEmbed
- reactjs - styled-components:样式化的自定义组件,带有一些道具
- .net - 无法使用 .NET Framework 和 .NET Standard 包解决此参考错误
- matlab - MATLAB - 割线法产生 NaN
- amazon-web-services - HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: name expected at the position 7 of 'struct<`$date`:string>' but '`' is found