簡體   English   中英

Azure Functions V2將HttpRequest反序列化為對象

[英]Azure Functions V2 Deserialize HttpRequest as object

我很驚訝我找不到答案,但我有一個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對象訪問流,但我不確定如何將其轉換為預期的對象。 有任何想法嗎?

API發生了一些變化。 如您所見, Content不再存在。 但是,您仍然可以使用Microsoft.Azure.WebJobs.Extensions.Http命名空間中包含的擴展方法(它應該作為依賴項包含)來獲得相同的功能:

string json = await req.ReadAsStringAsync();

您可以在此處查看此擴展方法的來源

然后你將使用Json.NET反序列化(Json.NET也已經是一個依賴)

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

如果您不知道對象的類型,可以執行以下操作:

string json = await req.ReadAsStringAsync();
dynamic data = JObject.Parse(json);

您可以綁定到自定義對象而不是HttpRequest。 此對象是從請求主體創建的,並解析為JSON。 類似地,類型可以傳遞給HTTP響應輸出綁定,並作為響應主體返回,同時返回200狀態代碼。 例:

public static partial class SayHelloFunction
{
    [FunctionName("SayHello")]
    public static async Task<ActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)]Person person, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        return person.Name != null ?
                (ActionResult)new OkObjectResult($"Hello, {person.Name}")
            : new BadRequestObjectResult("Please pass an instance of Person.");
    }
}

要綁定的模型..

public class Person
{
    public Person()
    {

    }
    public Person(string name)
    {
        Name = name;
    }

    public string Name { get; set; }
}

HTTP請求:[POST] http:// localhost:7071 / api / SayHello正文 :{name:“Foo”}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM