Azure Functions V2将HttpRequest反序列化为对象

问题描述 投票:3回答:2

我很惊讶我找不到答案,但我有一个Azure功能(HTTP触发器)我只是想将内容反序列化为一个对象。以前用V1我能做到这一点,

功能V1

[FunctionName("RequestFunction")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
    // Successful deserialization of the content
    var accountEvent = await req.Content.ReadAsAsync<AccountEventDTO>();

    // Rest of the function...
}

但现在使用V2看起来更像是这样,

功能V2

[FunctionName("RequestFunction")]
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ILogger log)
{
    // Content doesn't exist on HttpRequest anymore so this line doesn't compile
    var accountEvent = await req.Content.ReadAsAsync<AccountEventDTO>();

    // Rest of the function...
}

我可以让主体从HttpRequest对象访问流,但我不确定如何将其转换为预期的对象。有任何想法吗?

c# azure-functions
2个回答
8
投票

API发生了一些变化。正如你所见,Content不再存在。但是,您仍然可以使用Microsoft.Azure.WebJobs.Extensions.Http命名空间中包含的扩展方法(应该已作为依赖项包含)来获得相同的功能:

string json = await req.ReadAsStringAsync();

您可以查看此扩展方法here的来源

然后你将使用Json.NET反序列化(Json.NET也已经是一个依赖)

var someModel = JsonConvert.DeserializeObject<SomeModel >(json);

0
投票

如果您不知道对象的类型,可以执行以下操作:

string json = await req.ReadAsStringAsync();
dynamic data = JObject.Parse(json);
© www.soinside.com 2019 - 2024. All rights reserved.