读取请求的内容 - ReadAsStringAsync()

l--*_*''' 4 c# asp.net-mvc azure .net-core azure-functions

我尝试像这样读取请求的内容:

var translation = await req.Content.ReadAsStringAsync();

但得到这个例外:

在此输入图像描述

严重性代码描述项目文件行抑制状态错误 CS1061“HttpRequest”不包含“Content”的定义,并且找不到接受“HttpRequest”类型的第一个参数的可访问扩展方法“Content”(您是否缺少 using 指令或装配参考?)

以下是我正在使用的库:

在此输入图像描述

我究竟做错了什么?如何阅读内容正文?

这是周围的代码:

    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = "OnTranslateSingleHttpTriggered")] HttpRequest req,
        ILogger log)
    {
        var translation = await req.Content.ReadAsStringAsync();
        //do work
    }
Run Code Online (Sandbox Code Playgroud)

Jer*_*Liu 10

正如@Garr 提到的,Content 是 HttpRequestMessage 的一个属性。在针对.NET Core 2的v2 Functions中,我们通常使用HttpRequest并读取如下内容。

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
Run Code Online (Sandbox Code Playgroud)

更新

Runtime 2.0.12265已经提供给VS用户,请放心使用.NET Core 2.2。


另请注意,自运行时 v2.0.12265起就支持 .NET Core 2.2 ,但运行时更新尚未在所有地方推出,即我们仍然在本地使用旧版本。因此,将Microsoft.AspNetCore.Mvc包恢复为2.1.0,否则我们可能会收到错误。(Microsoft.AspNetCore.Http被引用,Microsoft.NET.Sdk.Functions因此无需再次安装)

您的项目文件(右键单击项目,Edit <FunctionProjectName>.csproj)应如下所示

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.24" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
    <PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)